我有两种模式:
问题(身份证,文字,部分,因素)
答案(id,question_id,已选中)
问题has_many:答案 回答belongs_to:问题
我的目标是找到问题的因素 text 等于回答选择的字段,我只从答案中搜索
为了表明我的意思是SQL,它提供了我期望的结果
std::vector<int> append_negatives(std::vector<int> v) {
v.reserve(v.size()*2);
for(int &x: v) v.push_back(x);
return v;
}
在rails中我尝试使用连接
SELECT questions.factor FROM answers INNER JOIN questions
ON questions.text = answers.selected WHERE answers.id = 5
但结果并不准确,因为我在控制台栏中可以看到包括相关字段连接&#34;问题&#34;。&#34; id&#34; =&#34;答案&#34;。&#34; question_id&#34;
answers.joins(:question).where('questions.section = 4').where
('answers.selected = questions.text')
嗯,我相信Ruby的魅力应该在这里工作,请建议我一些精彩的方法来获得想要的结果。
感谢。
答案 0 :(得分:2)
使用answers.joins(:question)
将始终生成INNER JOIN "questions" ON "questions"."id" = "answers"."question_id"
,因为这是belongs_to :question
中定义Answer
关联的方式。
但是您可以根据需要将字符串传递给join
。这样的事情(where
条件可能需要额外的id = 5
):
answers.joins('INNER JOIN questions ON questions.text = answers.selected')
答案 1 :(得分:1)
@spickermann的回答是现货!请充分诚意,请使用它。但是,有了这个问题,我开始使用Arel
来讨论如何做同样的事情并提出:
custom_join = Answer.joins(:questions).on('questions.text = answers.selected').join_sources
# above will return an array with an inner join representation in Arel
Answer.joins(custom_join).where('questions.section = 4')
#=> ActiveRecord::Relation result