2017-05-13 9 views
1

私はこのデータモデリングの問題で数日間頭を悩ましています。私はRailsで7年以上働いていますが、この関係モデリングは私を逃しています。決定、選択、および選択肢の関係をモデル化する方法は?

チームは今年のスーパーボウルを獲得します:

は、私は基本的には、たとえば、 :question属性で構成されてい Decisionモデルを、持っていますか?

  1. ダラス・カウボーイズ
  2. ニューイングランド・ペイトリオッツ
  3. ニューヨーク・ジャイアンツ
  4. グリーンベイ・パッカーズ
:各 @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_sethas_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にしたくありません。

答えて

1

[OK]を、我々は複数の意思決定は、同じ選択セット持つことができると言う場合:

チームは、今年のスーパーボウルに勝つのだろうか?チームは今年のスーパーボウル第二に来る

?私たちは、これはあなたが必要があることを意味... ChoiceSetと判断

の間に多くの関係各ChoiceSetは多くの選択肢を持つことができますが、あなたはまた、それぞれの選択肢が多くChoiceSetsに属することができることを言っている1つがあります知っている

別の結合表。関係が何かのような...

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_idchoice_id

+0

問題がありました - と私は私の元の質問に指定されている必要があります - もしということです'Choice'は' choice_set_id'を持っています。例えば、 'Choice Foo 'を含む' ChoiceSet'を持っていれば、重複したコンテンツ(潜在的に)を持つ選択レコードを生成する必要があります。そして、 'With 'Choice Foo' ...' Choice'レコードが重複しないようにしたいと思います。 – lightyrs

+1

多対多の関係を持っている場合は、結合テーブル以外の選択肢はありません。 Choiceが多くのChoiceSetに属し、ChoiceSetに多数の選択肢がある場合は、それらの間に結合テーブルが必要です。私の編集された答えを見てください。 – SteveTurczyn

関連する問題