我已经对这个数据建模问题感到头疼了几天,并决定向你们寻求帮助。虽然我已经与Rails合作了7年多,但这种关系建模正在逃避我。
我有一个Decision
模型,它基本上由一个:question
属性组成,例如:
今年哪支球队将赢得超级碗?
对于每个@decision
,都有一组相应的@choices
,例如:
我想使用模型对这组@choices
进行分组。我们称之为ChoiceSet
。
所以用简单的英语总结一下所希望的关系:
决策通过ChoiceSet有很多选择。
到目前为止,这么好。在这里,我感到困惑。通常人们会这样建模:
model Decision < ActiveRecord::Base
has_many :choice_sets
has_many :choices, through: :choice_sets
end
model Choice < ActiveRecord::Base
has_many :choice_sets
has_many :decisions, through: :choice_sets
end
model ChoiceSet < ActiveRecord::Base
belongs_to :decision
belongs_to :choice
end
这里需要注意的是:这是建模的方式,决定可以有多个选择集。我如何对此进行建模,以便决策只能设置一个选项?
是否这么简单(只需将has_many :choice_sets
更改为has_one :choice_set
?
model Decision < ActiveRecord::Base
has_one :choice_set
has_many :choices, through: :choice_set
end
model Choice < ActiveRecord::Base
has_many :choice_sets
has_many :decisions, through: :choice_sets
end
model ChoiceSet < ActiveRecord::Base
belongs_to :decision
belongs_to :choice
end
感谢您的帮助。
修改
正如对此问题的回答所表明的那样,我应该指明我要避免说Choice :belongs_to Decision
以便我不需要创建新的Choice
记录除decision_id
以外的所有内容时。例如,我不想为&#34; Dallas Cowboys&#34;提供2 Choice
条记录。
答案 0 :(得分:1)
好的,如果我们说多个决策可以有相同的选择集:
今年哪支球队将赢得超级碗?
和
今年哪支球队在超级碗中排名第二?
我们知道ChoiceSet和Decision
之间存在一对多的关系每个ChoiceSet可以有很多选项,但你也说每个Choice都属于很多ChoiceSets ......这意味着你需要另一个连接表。这种关系就像......
model Decision < ActiveRecord::Base
belongs_to :choice_set
has_many :choices, through: :choice_set
end
model ChoiceSet < ActiveRecord::Base
has_many :decisions
has_many :choice_set_choice_links
has_many :choices, through: :choice_set_choice_links
end
model ChoiceSetChoiceLink < ActiveRecord::Base
belongs_to :choice_set
belongs_to :choice
model Choice < ActiveRecord::Base
has_many choice_set_choice_links
has_many choice_sets, through: choice_set_choice_links
has_many :decisions, through: :choice_sets
end
模型决策有choice_set_id
ChoiceSetChoiceLink模型具有choice_set_id
和choice_id