使用find从连接表中选择属性

时间:2014-05-30 06:57:19

标签: ruby-on-rails activerecord

我有三张桌子,

  

问题集

     
      
  • has_many:questions
  •   
     

问题

     
      
  • has_many:answers
  •   
     

答案

现在Answers表中有一个名为" actual_answer"

的列

现在我想做一个查找,我可以获得所有Answers,其中actual_answers等于特定值,属于特定的question_set。

我现在有这个:

@questionSet= QuestionSet.find(params[:id])
@answers = Answer.find(:all, :conditions => ["actual_answer=?", SOMEACTUALANSWER])
answers_i_need = []
@answers.each do |answer|
  if answer.question.question_set_id == @questionSet.id
   answers_i_need << answer
  end
end

有没有更好的方法来做到这一点,因为我期待千个阵列结果并且制作循环可能不是完美的方式。

谢谢!

1 个答案:

答案 0 :(得分:0)

为什么不使用has_many ... :through关系?链接到:guides

这样你就可以:

QuestionSet
  has_many :questions
  has_many :answers, through: :questions

Question
  has_many :answers
  belongs_to :question_set

Answer
  belongs_to :question

然后在你的控制器中你有:

@questionSet= QuestionSet.find(params[:id])
answers_i_need = @questionSet.answers.where('actual_answer = ?', your_actual_value)

哦,如果您要查询的结果超过一千个,您可以考虑查看this