2016-04-22 16 views
0

私はRailsでクイズを作成しています。私は私の関連で空白を描きます。ActiveRecord many_to_many関連の混乱

私は、私がそこにいることを知っている3つのテーブルがあると言います。

users 
    |___id 
    |___name 

quizzes 
    |___id 
    |___user_id 

questions 
    |___id 
    |___question 
    |___poss_answer_one 
    |___poss_answer_two 
    |___poss_answer_three 
    |___answer 
    |___test_version 

これは私が始めたものです。サイトの機能は次のとおりです。

ユーザーは、アクティブなクイズ(クイズ)に追加するカテゴリを3つまで選択できます。そのため、ユーザーは一度に1つのクイズのみを作成します。新しいクイズが終了または再開すると、クイズの表への入力が再作成されるためです。

したがって、ユーザーはhave_oneクイズを行い、belongs_toユーザーをクイズします。

次へ私はクイズにhas_manyという質問があり、質問は再利用可能であり、さまざまなクイズに含めることができるため、参加表が必要ですか?

た場合には、それはそれはにhas_manyを通じている必要がある場合には

quiz_questions 
    |___id 
    |___question_id 
    |___quiz_id 

だろう。

これが完了すると、関連付けをモデル化する方法がわかります。言葉遣いのために自分自身を混乱させるだけです。

答えて

1

おそらくあなたがHABTMの関連付けを必要とする(このRailsCastsを参照)

class Quiz < ActiveRecord::Base 
    has_and_belongs_to_many :questions 
end 
+0

これは推奨されておらず、HMTアソシエーションで行う必要があります。私はちょうど何が正しいのかを私が理解していることを確認したい。私は違いを理解していますが、厳密には結合テーブルの場合はHABTMが使用されます。 –

+0

あなたのケースのHABTMはデフォルトでquizzes_questionsテーブルを使用します。それは非難されていないようです。 [APIドキュメント]を参照してください(http://apidock.com/rails/v4.2.1/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many) –

+0

さて、ありがとう、情報のおかげで、私は正しい道のりであったように見え、ちょっと混乱しました。 –

0

有効なアプローチの数は(私が主張するだろう)があります。 has_many throughの提案を受けて、次のことが可能になります。 (HATBMは実装が簡単で、ほとんどのユースケースで有効ですが)。

class Question < ActiveRecord::Base 
    belongs_to :category 
    has_many :quiz_questions 
    has_many :quizzes, through: :quiz_questions 

class QuizQuestion < ActiveRecord::Base 
    belongs_to :quiz 
    belongs_to :question 

class Quiz < ActiveRecord::Base 
    belongs_to :user 
    has_many :quiz_questions, dependent: :destroy 
    has_many :questions, through: :quiz_questions 

あなたが書いている:彼らは終了したり、新しいものを再起動 とき、クイズテーブルにエントリが 再なりますので、ユーザーは一度に一つのクイズを持っています

-作成した。

この場合でも、依然としてhas_manyの関係が必要です。あなたは、クイズテーブルのレコードを「再作成」していません。新しいレコードを作成します。別の機能として、これらの「古い」レコードがもはや必要なくなった場合に、その特定のユーザーに所属するクイズテーブルの(既存の)レコードに削除することができます。

0

ユーザは、ゼロ、1つまたは多数のクイズ(1つだけでなく)を有することができるので、関連付けは、has_many関連だけでなくhas_one関連すること、のために明確にすべき

  • ユーザは、1つのクイズ有する:user.quiz
  • ユーザー多くのクイズがあります:user.quizees
  • クイズは、ユーザーに属している:quiz.user

が、ユーザは一度に1つのクイズしか持たないが、ユーザがそれを終了した後、別の新しいクイズを持つことができる。

  • USER1 - > quiz1
  • USER1 - > quiz2
  • USER1 - > quiz3

many-to-many関連についてあなたが余分な列を必要としない場合、あなたは(has_and_belongs_to_manyを使用することができますテーブル、quiz_idとquestion_idを除く)または結合テーブルを導入する