class Person < ActiveRecord::Base
  has_many :pets

  scope :with_dog, join(:pets).where("pets.type = 'Dog'")
  scope :without_pets ???????????????????????????????????
end

class Pet < ActiveRecord::Base
  belongs_to :people
end


我想在Person模型中添加一个范围,以返回没有宠物的人。有任何想法吗?我觉得这很明显,但此刻正在逃避。

最佳答案

尝试这样的事情:

Person.joins('left outer join pets on persons.id=pets.person_id').
       select('persons.*,pets.id').
       where('pets.id is null')


我没有测试过,但它应该可以工作。

这个想法是,我们正在执行左外部联接,所以对于没有宠物的每个人,宠物字段将为null。您可能需要在连接中包含:readonly => false,因为在join()传递字符串时ActiveRecord返回只读对象。

关于ruby-on-rails - 查找 rails 中没有关联记录的记录3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5332093/

10-09 15:14