【发布时间】:2020-01-15 17:20:00
【问题描述】:
我有以下课程
class Order
has_many :order_issues, through: :order_deliveries, inverse_of: :order
end
class OrderDelivery
has_many :order_issues, as: :issuable, inverse_of: :order_delivery
belongs_to :order, inverse_of: :order_deliveries
end
class OrderIssue
belongs_to :order, inverse_of: :order_issues
belongs_to :order_delivery, inverse_of: :order_issues
end
当我尝试时
Order.joins(:order_issues).to_sql
SELECT orders.*
FROM orders
INNER JOIN order_deliveries
ON order_deliveries.order_id = orders.id
INNER JOIN order_issues
ON order_issues.issuable_id = order_deliveries.id
AND order_issues.issuable_type = 'OrderDelivery'
它按预期工作。但是,当我尝试
OrderIssue.joins(:order).to_sql
SELECT order_issues.id
FROM order_issues
INNER JOIN orders
ON orders.id = order_issues.order_id
为什么不一样?理想情况下,我希望 SQL 查询如下所示,以提供OrderIssue 活动记录
SELECT order_issues.*
FROM order_issues
INNER JOIN order_deliveries ON order_issues.issuable_id = order_deliveries.id
AND order_issues.issuable_type = 'OrderDelivery'
INNER JOIN orders
ON order_deliveries.order_id = orders.id
【问题讨论】:
-
多读几遍,看看你是否能找到不同之处:
Order.join(:order_issues)与OrderIssue.joins(:order)。 -
更新代码
标签: ruby-on-rails activerecord rails-activerecord has-and-belongs-to-many