【发布时间】:2017-03-20 23:03:32
【问题描述】:
Company has_many :agents, Agent belongs_to :company.
Agent has_many :cmets, Comment belongs_to both :agent 和 :business。
业务 has_many :cmets。
什么 ActiveRecord 查询可以找到所有带有公司代理所写评论的企业?
我可以得到一个公司所有代理的所有cmets:
@company.agents.joins(:comments)
使用该查询,我可以提取公司代理评论的所有 business_id:
@company.agents.joins(:comments).pluck(:business_id)
(因此,如果没有其他方法,我可以在给定 ID 数组的情况下使用对 Business 的 second 查询获得所需的企业列表。)
但是,我似乎无法在单个查询中扩展关联链以包括企业,例如,查找公司代理评论的每个企业的业务记录的查询,例如:
@company.agents.joins(:comments).joins(:business) # 无法将“代理”加入名为“企业”的关联
编辑:
按照 Jon 在 cmets 中的建议尝试了 @company.agents.joins(:comments => :business)。如果执行 .count() 或 .pluck() 则有效。
如果还需要按业务字段查询,可以这样做:
@company.agents.joins(:comments => :business).where(:businesses => {:account_status => :active})
【问题讨论】:
-
看起来您将第二个
join放到agents范围内。您是否尝试过这样做:@company.agents.joins(:comments => :business)? -
宾果游戏,是的,谢谢。我以为我试过了,也许我之前弄错了复数/单数。
-
虽然 @company.agents.joins(:cmets => :business) 仍然不允许然后附加额外的查询,例如 where("business.status = ?", 'active')错误“缺少表“业务”的 FROM 子句条目”
-
.where(:businesses => {:account_status => :active}) 是关键
-
乔恩如果想重新发布作为答案,我会很乐意接受它
标签: ruby-on-rails activerecord associations