私はこのデータモデリングの問題で数日間頭を悩ましています。私はRailsで7年以上働いていますが、この関係モデリングは私を逃しています。決定、選択、および選択肢の関係をモデル化する方法は?
チームは今年のスーパーボウルを獲得します:
は、私は基本的には、たとえば、:question
属性で構成されていDecision
モデルを、持っていますか?:各
- ダラス・カウボーイズ
- ニューイングランド・ペイトリオッツ
- ニューヨーク・ジャイアンツ
- グリーンベイ・パッカーズ
@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
:通常1がそうのように、これをモデル化するだろう、これはモデル化された方法で、決定は複数の選択肢のセットを持つことができます。意思決定に1つの選択肢しか持てないように、これをどのようにモデル化できますか?
が、それはこのような単純な(単純にhas_one :choice_set
にhas_many :choice_sets
を変えていますか?
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
レコードを作成する必要はありませんn decision_id
以外はすべて同じです。例えば、私は "ダラスカウボーイズ"のレコードを2 Choice
にしたくありません。
問題がありました - と私は私の元の質問に指定されている必要があります - もしということです'Choice'は' choice_set_id'を持っています。例えば、 'Choice Foo 'を含む' ChoiceSet'を持っていれば、重複したコンテンツ(潜在的に)を持つ選択レコードを生成する必要があります。そして、 'With 'Choice Foo' ...' Choice'レコードが重複しないようにしたいと思います。 – lightyrs
多対多の関係を持っている場合は、結合テーブル以外の選択肢はありません。 Choiceが多くのChoiceSetに属し、ChoiceSetに多数の選択肢がある場合は、それらの間に結合テーブルが必要です。私の編集された答えを見てください。 – SteveTurczyn