belongs_to :通过集合关联所有都属于同一个对象

问题描述 投票:0回答:1

我有以下课程:

class Order
  has_many :line_items
end
class LineItem
  belongs_to :order
  has_many :line_item_production_items
  has_many :production_items, through: :line_item_production_items
end
class ProductionItem
  has_many :line_item_production_items
  has_many :line_items, through: :ine_item_production_items
  belongs_to :order
end

我想为 ProductionItem 创建关联:

belongs_to :order, through: :line_items

我知道与生产项目关联的所有

line_items
都具有完全相同的顺序,因此只会有 1 个不同的顺序。我通过关联找到了这篇文章belongs_to,并尝试在LineItem
中使用以下行:

base.delegate :order, to: :production_items


但这引发了错误(

ArgumentError:方法 .group() 必须包含参数),因为 order

 是保留关键字。我无法更改名称 
order
,因为它是我使用的电子商务插件的一部分。

有什么方法可以在 ActiveRecord 中创建此关联,这样我就可以执行像

ProductionItem.includes(order: [:bill_address, :ship_address]).where(WHERE_QUERY)

 这样的查询而不会抛出错误?

activerecord ruby-on-rails-7
1个回答
0
投票
如果您想直接从

Order

 包含 
ProductionItem
,您需要反规范化并将 
Order
 FK 添加到 
ProductionItem
 表中。

否则,您可以通过关联的

LineItem

 预先加载,使用当前的设置来完成此操作,如下所示:

ProductionItem.includes(line_items: {order: [:bill_address, :ship_address]}).where(WHERE_QUERY)
    
© www.soinside.com 2019 - 2024. All rights reserved.