考虑此设置。请理解,我们的设置更加详细,但这是一个简单的示例。
competition
有name
。这是一年一度的比赛。
competition_instances
其中有location
,starts_at
。
每个比赛都有sports
哪个name
。
范例:
competition
。name
:“超级碗”competition_instances
每年都有不同,但sport
保持不变。
相反,competition
。name
“奥运”有不同competition_instances
,不同sports
在每个competition_instance
。
最好创建competition_sports
并将competition_instance_sports
其competition_instance_sports
作为的子类competition_sports
吗?
目标:使用competition_instance_sports
记录(如果存在),否则使用competition_sports
记录。在我们的真实应用中,每个比赛/比赛实例可以拥有20-50个运动记录。我们如何才能最好地实现?
我只是在考虑这样一种情况:有些标准体育总是在奥运会中出现,而有些又在增加,例如东道国提出的那些。
class Competition < ActiveRecord::Base
has_many :competition_instances
has_many :competition_sports, as: :event
end
class CompetitionInstance < ActiveRecord::Base
belongs_to :competition
has_many :competition_sports, as: :event
def events_array # neater by sacrificing ActiveRecord methods
competition.competition_sports + competition_sports
end
def events # messier, returns ActiveRecord relationship
CompetitionSport.where( " ( event_id = ? AND event_type = 'Competition' ) OR
( event_id = ? AND event_type = 'CompetitionInstance')", competition_id, id )
end
end
class Sport < ActiveRecord::Base
has_many :events, as: :competition_sport
end
class CompetitionSport < ActiveRecord::Base
belongs_to :sport
belongs_to :event, polymorphic: true
end
这允许:
competition.competition_sports # standard sports
competition_instance.competition_sports # only those specific for this instance
competition_instance.events # includes sports from both
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句