我有3个模型:Quiz
,has_many
questions
,has_many
answers
。较低的模型将belongs_to
模型直观地置于其上方(测验>问题>答案)。
我的问题是我希望得到所有答案的集合。我以为我可以使用quiz.questions.answers
或quiz.questions.all.answers
之类的内容执行此操作,但我只是收到错误undefined method 'answers'
。为什么会发生这种情况?如何解决?
答案 0 :(得分:2)
Answer
属于一个Question
,因此您无法在answers
的集合上调用questions
,因此如果您想要所有测验问题的所有答案,那么你可以做这样的事情来实现,在Quiz
模型中添加这个
has_many :answers, through: :questions
通过添加,您可以通过执行quiz.answers
直接获取所有答案。
现在,如果您想获得具体问题的答案,那么您可以做类似的事情
quiz = Quiz.where(id: quiz_id).include(:questions => :answers)
quiz.questions.each do |question|
answers = question.answers
# perform some action
end
希望有所帮助!
答案 1 :(得分:0)
这是需要"通过"关联。
class Quiz
has_many :questions
has_many :answers, :through => :questions
然后:
my_quiz.answers
答案 2 :(得分: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