ruby-on-rails - 检查关联是否存在

标签 ruby-on-rails ruby-on-rails-3

我有一个像这样的用户模型:

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/

相关文章:

ruby-on-rails - 使用 Elastic Beanstalk 404 Not Found 错误部署 Rails

ruby-on-rails - Ruby on Rails Postgres 服务器

ruby-on-rails - 在 Rails 3.1 中为 Mailer 和 View 提供自定义帮助器

ruby-on-rails - 是否可以使用 NewRelic 监控 EventMachine 进程?

ruby-on-rails - Rails Routes - 深度链接的重定向路径,hashchanges?

mysql - 如何增加十进制值?

ruby-on-rails - 与 has_many 建立关联 :through in multiple models

ruby-on-rails - rails 语法错误 : wrong number of arguments

ruby-on-rails - 如何列出具有活跃记录的前 10 名学校 - rails

ruby-on-rails - 如何使用 accepts_nested_attributes_for 在 Rails ActiveRecord 中创建、关联和取消关联相关记录