如何编写此sql
select * from interview_questions as iq inner join (select * from interview_answers as iaa where iaa.case_id=6 and iaa.used='t') as ia where iq.id = ia.interview_question_id;
使用Ruby on Rails ActiveRecord? interview_questions有很多interview_answers,是1到N的关系。我想获取此sql查询通常会返回的InterviewQuestion列表。
答案 0 :(得分:1)
假设你的模型之间有1到N的关系,你需要像这样使用has_many协会:
http://guides.rubyonrails.org/association_basics.html#the-has-many-association
Rails指南解释说:
has_many关联表示与另一个模型的一对多连接。您经常会在"其他方面找到这种关联"属于一个关联。此关联表示模型的每个实例都具有零个或多个另一个模型的实例。例如,在包含作者和书籍的应用程序中,作者模型可以声明为:
你可能需要这样做:
class interview_questions < ApplicationRecord
has_many :interview_answers
end
class interview_answers< ApplicationRecord
belongs_to :interview_questions
end
之后,您需要创建一个迁移以在interview_answers模型中添加foreing密钥。
rails generate migration add_interview_questions_to_interview_answers interview_questions:references
最后,你可以使用像
这样的关联助手interview_questions.first.interview_answer.where(case_id: 6).where(used: 't')
请记住,这只是一个例子,您可能需要调整一些小事情。祝你好运!
答案 1 :(得分:1)
按照@Gabriel Mesquita的建议完成协会后,我需要这个来完成我的任务。
InterviewQuestion.where(id: InterviewAnswer.where(case_id: params[:case_id], used: 't').pluck(:interview_question_id))
是我寻找的Ruby on Rails代码。它选择所有具有与当前case_id相对应的interview_answer的interview_questions,并使用所使用的set来设置&#39;。