Rails Activerecord通过三个关联查询?

时间:2017-03-20 23:03:33

标签: ruby-on-rails activerecord associations

公司has_many:代理商,代理人belongs_to:公司。

代理人has_many:评论,评论belongs_to:agent和:business。

业务has_many:评论。

ActiveRecord查询通过公司代理人查找所有具有评论的企业?

我可以获得公司所有代理商的所有评论:

@company.agents.joins(:comments)

使用该查询,我可以获取公司代理评论的所有business_id:

@company.agents.joins(:comments).pluck(:business_id)

(因此,如果没有别的办法,我可以在给定ID数组的情况下使用第二个查询到商业中获得所需的商家列表。)

但是我似乎无法在单个查询中扩展关联链以包含企业,例如,查找公司代理评论的每个企业的业务记录的查询,例如:

@company.agents.joins(:comments).joins(:business)#无法加入'代理商'以名为' business'

的协会

编辑:

按照Jon在评论中的建议尝试@company.agents.joins(:comments => :business)。如果执行.count()或.pluck()。

如果还需要按业务字段查询,可以通过以下方式进行查询:

@company.agents.joins(:comments => :business).where(:businesses => {:account_status => :active})

1 个答案:

答案 0 :(得分:1)

您要将第二个join查询添加到agents范围内。您需要使用以下内容:

@company.agents.joins(:comments => :business)

如果您需要为业务添加条件,您可以按照以下步骤添加条件:

@company.agents.joins(:comments => :business).where(:businesses => {:account_status => :active})

这样它就可以正确地为您链接连接查询,并将条件添加到相应的表中。