Я пытаюсь установить полиморфные отношения в Rails и столкнулся с некоторыми трудностями. Вот моя модель данных:has_many polymorphism/inheritance in 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" или "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.
Это кажется очень простым в теории, но это не выглядит как есть много поддержки для этой структуры в целом. У кого-нибудь есть идеи по реализации этого в базе данных postgresql с помощью ActiveRecord?
Когда 'PhysicalItem' и' VirtualItem' наследуются от продукта, я не вижу модель продукта в вашем списке? Где он вписывается во все это? – jvperrin
Думаю, мне не нужна модель продукта - единственная вещь, которую я получаю от нее, - это возможность запрашивать order.products, а затем извлекать кучу смешанных физических объектов и VirtualItems. –
Кроме того, я отредактировал свой вопрос, чтобы отразить мои обновленные имена объектов - извините за недоразумение раньше. –