我有以下关联:
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编写?
答案 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_as
和model_bs
。
希望这有帮助。