考虑这个设置。请理解我们的设置要详细得多,但这是一个简单的示例。competition
其中有 name
.这是一年一度的比赛。competition_instances
其中有 location
, starts_at
.
每场比赛都有sports
其中有 name
.
例子:competition
. name
:《 super 碗》有不同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 项运动记录。我们怎样才能最好地实现?
最佳答案
根据我从问题中的理解,我看不出 STI 在这种情况下有什么帮助。但是,连接表可以让您到达您想要的位置。
我建议创建一个新表 sports
,该模型将包含每项运动的所有具体细节。 competition_instance.rb
将有一个/多个 sport.rb
. competiton.rb
会有很多sports
通过 competition_instance.rb
.
竞赛.rb
Class Competition < ActiveRecord::Base
has_many :competition_instances
has_many :sports, through: :competition_instances
end
Competition_instance.rb
Class CompetitionInstance < ActiveRecord::Base
belongs_to :competition
belongs_to :sport
end
体育.rb
Class Sport < ActiveRecord::Base
has_many :competition_instances
end
通过使用此设计,您将能够实现以下目标:
1- 您将在数据库中拥有预定义的运动及其特定属性。
2- 每场比赛将有
.sports
这将把本次比赛中的所有运动项目都交给奥运会的案例。3- 您将能够在比赛实例表中为每个比赛实例(例如
event_start_time
和 event_end_time
)设置特定属性。
关于sql - rails : Is this a use case for Single Table Inheritance (STI)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34023926/