【发布时间】:2019-07-30 13:06:47
【问题描述】:
我想加入 2 个表,但我需要使用 3th 来设置它们之间的关系。
每个订单都由一名员工准备。我只想为特定员工查找 OrderDetails。要检查这一点,我需要找到分配给车间订单的人员。
我几乎可以肯定我知道如何在 SQL 中执行此操作。只是概念查询:
SELECT OrderDetails.payment_id FROM OrderDetais
INNER JOIN ShopOrders ON ShopOrders.id = OrderDetails.shop_order_id
INNER JOIN Employees ON Employees.id = ShopOrders.employee_id
WHERE Employees.id IN (5, 6, 8)
我只是想在 Rails 中写同样的东西:
query = OrderDetail
.where('order_details.created_at > ? AND order_details.created_at < ?', 1.year.ago, 2.days.ago)
query = query.joins(:shop_order)
我使用to_sql 来检查我的查询是否看起来不错。一切顺利,直到我加入 query.joins(: employee)
query = OrderDetail
.where('order_details.created_at > ? AND order_details.created_at < ?', 1.year.ago, 2.days.ago)
query = query.joins(:shop_order)
query = query.joins(:employee)
然后我收到一个错误:
ActiveRecord::ConfigurationError: 无法将“OrderDetail”加入名为“employee”的关联;也许你拼错了?>
我尝试关注Joining Nested Associations (Multiple Level)。但是我不知道如何正确使用它。
在 OrderDetail 模型中有:
delegate :employee, to: :shop_order, allow_nil: true
在 ShopOrder 模型中:
belongs_to :employee, optional: false
has_many :order_details, dependent: :restrict_with_error
和Employee模型:
has_many :shop_orders
has_many :order_details, through: :shop_orders
【问题讨论】: