为了不拥有多个相同的记录/类似的记录,我正在使用
delegated_type
进行调查,但是我对我的关联应该/将如何工作感到困惑。
我有一张表,
Item
,它使用委托来继承 InvoiceItem
、OrderItem
、NoteItem
和 BasketItem
.
我有
item
、PurchaseOrder
、DeliveryNote
和Invoice
的父表。
PurchaseOrder
将有很多项目,其中 itemable
是 OrderItem
或 BasketItem
.DeliveryNote
会有很多项,其中itemable
是NoteItem
Invoice
会有很多项,其中itemable
是InvoiceItem
item.rb
delegated_type :itemable, primary_key: :uuid, types: ["OrderItem", "InvoiceItem", "NoteItem", "BasketItem"]
NoteItem/InvoiceItem/OrderItem/BasketItem
has_one :item, as: :itemable, dependent: :destroy
现在我不确定
Item
是否应该属于PurchaseOrder
或者继承表(OrderItem/BasketItem
)是否应该是关系。
例子:
PurchaseOrder.rb
has_many :order_items, -> { where(itemable_type: OrderItem) }, class_name: "Items",
foreign_key: "purchase_order_id",
inverse_of: :purchase_order,
dependent: :destroy
OrderItem.rb
belongs_to :purchase_order, class_name: "PurchaseOrder"
我相信第一个选项应该是正确的方法,但我不确定
belongs_to
如何为子项目工作,OrderItem
belong_to
一个PurchaseOrder
?这将导致 PurchaseOrder
有很多项目,其中 itemable
是 OrderItem
,但只有 OrderItem
属于 PurchaseOrder
,但也许这是正确的,我误解了 delegated_type
文档。
谢谢。
文档:
版本: Rails
7.0.4
、Ruby 3.0.1
和 PGSQL 14