我有一个像这样的用户模型:
has_one :car
和汽车模型:
belongs_to :user
如何查看哪些用户没有汽车?
最佳答案
你可以这样写一个查询:
User.includes(:car).where(cars: {user_id: nil})
我建议将其提取到一个范围内:
class User < ActiveRecord::Base
# ...
def self.without_car
includes(:car).where(cars: {user_id: nil})
end
end
然后你可以简单地写
User.without_car
编辑
为了澄清:在幕后,将发出此查询:
SELECT "users"."name" FROM "users"
LEFT OUTER JOIN "cars" ON "cars"."user_id" = "users"."id"
WHERE "cars"."user_id" IS NULL
连接将为 car.user_id
生成一个空行,因此我们可以简单地检查该行是否为 NULL
(或者,从 Active Record 的角度来看, 无
).
顺便说一句,这也适用于 has_many
关系,只需将 includes
的参数也更改为复数即可。请注意,where
的参数始终需要是复数,因为它是表名。
关于ruby-on-rails - 检查关联是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21044979/