繁体   English   中英

带内部联接的Rails查询

[英]Rails query with inner join

如何写这个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? 面试问题有很多面试答案,是一对一的关系。 我想获取该SQL查询通常返回的InterviewQuestion列表。

假设您的模型之间存在1到N的关系,则需要使用has_many关联,如下所示:

http://guides.rubyonrails.org/association_basics.html#the-has-many-association

Rails指南说明:

has_many关联表示与另一个模型的一对多连接。 您通常会在belongs_to关联的“另一侧”找到该关联。 该关联表明该模型的每个实例具有另一个模型的零个或多个实例。 例如,在包含作者和书籍的应用程序中,可以像下面这样声明作者模型:

您可能需要这样做:

class interview_questions < ApplicationRecord
  has_many :interview_answers
end

class interview_answers< ApplicationRecord
  belongs_to :interview_questions 
end

之后,您需要创建一个迁移,以在foreview_answers模型中添加前键。

rails generate migration add_interview_questions_to_interview_answers interview_questions:references

最后,您可以使用诸如

interview_questions.first.interview_answer.where(case_id: 6).where(used: 't')

请记住,这只是一个示例,您可能需要调整一些小事情。 祝好运!

在按照@Gabriel Mesquita的建议完成关联之后,我需要它来完成我的任务。

InterviewQuestion.where(id: InterviewAnswer.where(case_id: params[:case_id], used: 't').pluck(:interview_question_id))

是我想要的Ruby on Rails代码。 它会选择所有具有与当前case_id对应的visitor_answer且使用的设置为“ t”的visits_questions。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM