ActiveRecord:查找与某个值有关联的记录

时间:2014-06-05 05:08:24

标签: sql ruby-on-rails ruby activerecord rails-activerecord

我有以下关联:

ModelA < ActiveRecord::Base
  belongs_to :model_b
end

ModelB < ActiveRecord::Base
  has_many :model_as
end

假设有model_a.foo和model_b.bar列,并且有多个ModelA记录具有相同的foo值(比方说x)。但是,只有一个ModelA具有关联的ModelB,其条形值为y。我认为SQL将是:

SELECT model_a.id FROM model_a LEFT JOIN model_b ON model_a.id = model_b.model_a_id WHERE model_a.foo = "x" AND model_b.bar = "y"

如何使用ActiveRecord编写?

1 个答案:

答案 0 :(得分:1)

您必须非常保护代码库的这个特定代码段!

ModelA.joins(
  'left join model_bs on model_as.id = model_bs.model_a_id'
).where(
  model_a: { foo: 'x' }, 
  model_b: { bar: 'y' }
).select(
  'model_as.id'
)

因为您希望使用简单join(:model_b)无法实现的左连接是冗长left join model_bs on model_as.id = model_bs.model_a_id的原因。 where方法参数是基于散列的,以向您展示如何使用它们的示例。最后的select方法调用是选择所需的model_as.id,假设您的表名为model_asmodel_bs

希望这有帮助。