多层嵌套关联查询:获取卖家用户的所有Admin::Accbook数据
解决方案:获取指定卖家用户的所有Accbook数据
我来帮你搞定这个关联查询的问题!你已经完成了一部分关联,只需要把User的关联补全,再加上过滤条件就可以了。
方法一:完整关联所有表(和你提供的SQL完全匹配)
你需要在joins里嵌套到seller关联,因为Offer属于seller(也就是User模型),所以嵌套结构应该是purchase: { offer: :seller },然后通过users表的id来过滤:
# 替换成你实际要查询的用户ID target_seller_id = 1 Admin::Accbook.joins(purchase: { offer: :seller }) .where(users: { id: target_seller_id })
这段代码会生成和你提供的完全等价的SQL,自动完成所有INNER JOIN,并且过滤出卖家ID匹配的所有Accbook记录。
方法二:简化查询(更高效)
因为Offer表本身就有seller_id字段,我们可以直接通过这个字段过滤,不需要额外关联users表,这样查询会更高效:
target_seller_id = 1 Admin::Accbook.joins(purchase: :offer) .where(offers: { seller_id: target_seller_id })
这个写法生成的SQL会少一次JOIN,但结果和你要的完全一致——毕竟offers.seller_id就是对应用户的ID,直接过滤它就足够了。
验证生成的SQL
你可以通过调用.to_sql来查看生成的SQL语句,确保逻辑正确:
puts Admin::Accbook.joins(purchase: { offer: :seller }).where(users: { id: 1 }).to_sql
输出的SQL会和你提供的示例完全匹配。
内容的提问来源于stack exchange,提问作者Eduardo Álvarez




