我有类似于以下2个型号的东西:
class Person < ActiveRecord::Base
has_one :student
end
class Student < ActiveRecord::Base
belongs_to :person
end
我知道我可以找到所有学生的人:
Person.joins(:student)
如何找到 不是 学生的所有人?有没有办法使用ActiveRecord执行此操作而不必编写SQL查询?
答案 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))