2016-06-28 5 views
2

私は3モデル:Quizhas_manyquestionshas_manyanswersです。下のモデルはモデル直感的にbelongs_toのモデルです(クイズ>質問>回答)。ネストされたモデルに関連付けられたすべてのデータを取得するにはどうすればよいですか?

私の問題は、すべての回答のコレクションを取得したいということです。私はquiz.questions.answersまたはquiz.questions.all.answersのようなものでこれを行うことができると思ったが、ただエラーundefined method 'answers'が出る。なぜこれが起こっているのですか?それをどうやって修正しますか?

答えて

2

Answerはそうあなたがquestionsのコレクションにanswersを呼び出すことはできません1 Questionに属しているので、あなたは、クイズのすべての質問の全ての回答をしたい場合、あなたは行うことができますこのようなものは、あなたがABLになることを追加することにより、この

has_many :answers, through: :questions 

を追加Quizモデルでは、達成するためにe quiz.answersを実行してすべての回答を直接取得します。あなたが特定の質問の答えを取得したい場合

さて、あなたは助けこの

quiz = Quiz.where(id: quiz_id).include(:questions => :answers) 
quiz.questions.each do |question| 
    answers = question.answers 
    # perform some action 
end 

希望のようなものを行うことができます!

+0

オハイオ州オハイオ州オハイオ州オハイオ州オハイオ州オハイオ州オハイオ州だったので、おそらくそれだと思っていました...しかし、テーブルデータを変更しなければならないためではないと思っていましたか?現在の私の現在の団体によると、 'answers'には' question_id'があり、 'questions'には' answer_id'がありません。 'has_many:answers、through::questions'を追加すると' answers'から 'question_id'を取り出し、' questions'に 'answer_id'を追加する必要があります。それは、私が「回答」に私のメソッドのいくつかに対して 'question_id'を持っているという事実に頼っているので、私には少し問題があります。 –

+0

いいえ、 'has_many:answers、has::questions'を追加することで、' Quiz'モデルに 'has_many:questions'を既に持っているので、データベースレベルで何も変更する必要はありません。ActiveRecordは'クイズ'に属するすべての '答え'を得る。一度試してみてください! – RSB

+0

お返事ありがとうございます。それは私にとって理にかなっていますが、なぜRubyonrailsの公式ガイド(?)がそれを介入モデルのように見せてくれるのですか?(それらの場合、 '任命 'は、他のIDの両方が必要ですか?)http://guides.rubyonrails.org/ association_basics.html#have-many-through-association –

0

これは「スルー」関連が必要な完全な例です。その後

class Quiz 
    has_many :questions 
    has_many :answers, :through => :questions 

my_quiz.answers 
0
class Quiz < ActiveRecord::Base 
    has_many :questions 
    has_many :answers, through: :questions 
end 

class Question < ActiveRecord::Base 
    belongs_to :quiz 
    has_many :answers 
end 

class Answer < ActiveRecord::Base 
    belongs_to :question 
end 

Then you can have, 
quiz = Quiz.last 

quiz.questions 
quiz.answers 
関連する問題