ruby Rails:如何包含所有与where条件的关联

nc1teljy  于 2022-11-04  发布在  Ruby
关注(0)|答案(1)|浏览(163)

我使用的是Rails 6.1.4,我有一个Contact模型,它与Client模型有has_one关系。客户有一个status列。但是,不是所有的联系人都有客户,但是我想返回所有客户状态为active的联系人,包括没有客户的联系人。我尝试了这个查询,但是它只返回有客户关联的对象。

@contacts = @contacts.eager_load([:client, :organization, :addresses]).where("clients.status = 'Active'").all

有人能帮我查询一下吗?

whitzsjs

whitzsjs1#

未经检验,但应朝着正确的方向前进:
Contact.eager_load([:client, :organization, :addresses]).where("clients.status = 'Active'").to_sql
这里有一个我使用的技巧:检查查询生成的SQL:
Contact.eager_load([:client, :organization, :addresses]).where("clients.status = 'Active'").to_sql
看看它能给你带来什么,然后你可以玩find_by_sql

Contact.eager_load(...).find_by_sql(
  SELECT ... FROM contacts
  JOIN ...
  WHERE contacts.client_id IS NULL
  OR clients.status = 'Active'
)

相关问题