我是一个控制器,我有一个带有联接的查询以防止1 + n问题:
@questions = Question.joins(:answers).where("answers.user_id = ?", user_id)
现在,我想迭代视图中的问题并使用它们:
- @questions.each do |question|
- answer = question.answers.first
但是结果是答案表被查询了两次。如何从第一个联接查询中获得答案,所以我不需要第二个查询?
您是否真的只想返回用户给出的答案,还是您也想要所有其他用户的答案?
假设是前者,另一种方法可能是:
@questions = @user.answers.eager_load(:question).group_by{|answer| answer.question}
这将为您提供一个包含答案和问题的查询,然后group_by将返回一个哈希,其中的键是问题,值是用户答案的数组。
如果您希望所有用户都提供所有答案,则需要与User建立关联,从而为您提供他们已经回答的问题(has_many:questions_answered,通过:: answers,class_name:“ question”),然后:
@questions = @user.questions_answered.include(:answers)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句