Ruby on rails 如何在AREL中检查联接表关联?

Ruby on rails 如何在AREL中检查联接表关联?,ruby-on-rails,where,arel,Ruby On Rails,Where,Arel,基本上,我正在寻找AREL,这种工作方法的版本: @jobs.select{|a| !a.assignments.present? } 假设AREL或where语句更合适、更快。一个人怎么能比我现在写得更快呢?假设一份工作有很多任务 @jobs.where('id in (select j.id from jobs j inner join assignments a on a.job_id=j.id)') 执行此sql的以下命令: SELECT "jobs".* FROM "jobs"

基本上,我正在寻找AREL,这种工作方法的版本:

@jobs.select{|a| !a.assignments.present? }

假设AREL或
where
语句更合适、更快。一个人怎么能比我现在写得更快呢?

假设一份
工作有很多任务

@jobs.where('id in (select j.id from jobs j inner join assignments a on a.job_id=j.id)')
执行此sql的以下命令:

 SELECT "jobs".* FROM "jobs" INNER JOIN "assignments" ON "assignments"."job_id" = "jobs"."id" WHERE "assignments"."present" = 't'

但这并没有考虑我使用的特定即时变量。哪个特定即时变量???
@jobs
。您的匹配项将选择作业类。但是我想从实例变量
@jobs
中选择正确的假设。问题是,这个SQLSELECT语句是否等同于rails语句?因为它迭代每个对象并执行一个方法?不,它将是一个带有子查询的单选,返回一个
ActiveRecord::Relation
。您可以在Rails控制台中进行尝试,并查看生成的SQL。
 SELECT "jobs".* FROM "jobs" INNER JOIN "assignments" ON "assignments"."job_id" = "jobs"."id" WHERE "assignments"."present" = 't'