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/