【发布时间】:2013-10-27 23:18:23
【问题描述】:
我正在尝试在 Rails 中建立多态关系,但遇到了一些困难。这是我的数据模型:
class Order
has_many :order_items
end
class OrderItem
belongs_to :order
end
class PhysicalItem < OrderItem
end
class VirtualItem < OrderItem
end
PhysicalItem 和 VirtualItem 在它们的模型中有足够的差异,以保证被拆分到它们自己的表中。所以,我设想有:
订单表
physical_items 表
一个 virtual_items 表
一个 order_items 表,其中 item_type = ["PhysicalItem" or "VirtualItem"] 和对应表中匹配行的 item_id。
我最终希望能够编写这样的代码:
order = Order.new
physical_item = PhysicalItem.new
virtual_item = VirtualItem.new
order.order_items << physical_item
order.order_items << virtual_item
puts order.order_items
# Should list out the physical item and then the virtual item.
理论上看起来很简单,但总体上看来对这种结构的支持并不多。有人对使用 ActiveRecord 在 postgresql 数据库中实现这一点有任何想法吗?
【问题讨论】:
-
当
PhysicalItem和VirtualItem从产品继承时,我在您的列表中没有看到产品型号?它在哪里适合所有这些? -
我想我并不真的需要产品模型 - 我从中得到的唯一东西是能够查询 order.products 然后检索一堆混合的 PhysicalItems 和 VirtualItems。
-
另外,我编辑了我的问题以反映我更新的对象名称 - 抱歉之前的混淆。
-
如果您使用不同的表,请考虑使用使 MTI 更容易的 gem。
标签: ruby-on-rails inheritance activerecord polymorphism rails-postgresql