ActiveRecord查询未在另一个模型中引用的模型

时间:2015-04-13 09:07:49

标签: ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord ruby-on-rails-4.2

我有类似于以下2个型号的东西:

class Person < ActiveRecord::Base
  has_one :student
end
class Student < ActiveRecord::Base
  belongs_to :person
end

我知道我可以找到所有学生的人:

Person.joins(:student)

如何找到 不是 学生的所有人?有没有办法使用ActiveRecord执行此操作而不必编写SQL查询?

2 个答案:

答案 0 :(得分:3)

使用此声明:

Person.includes(:student).
       where(:students => {:id => nil})

Person.joins("LEFT JOIN students ON students.person_id = people.id").
       where(:students => {:id => nil})

我更喜欢后者,因为它不会选择不需要的列。

答案 1 :(得分:1)

由于你使用rails 4,你可以这样做:

Person.where.not(:id => Student.select(:person_id))