Rails 3 абстрактный класс против унаследованного класса - PullRequest
2 голосов
/ 02 марта 2011

В моей модели рельсов 3 у меня есть два класса: продукт, сервис.Я хочу, чтобы оба типа InventoryItem, потому что у меня есть другая модель с именем Store and Store has_many: InventoryItems

Это то, к чему я пытаюсь добраться, но я не уверен, как смоделировать это в моем InventoryItemмодель и мои модели продуктов и услуг.Должен ли InventoryItem быть просто родительским классом, от которого наследуются Product и Service, или InventoryItem должен быть смоделирован как аннотация класса, с которого расширяются Product и Service.

Заранее благодарим за совет!

Ответы [ 2 ]

2 голосов
/ 02 марта 2011

Лично я бы не стал пользоваться наследством.Почему бы вам просто не сказать

has_many :services
has_many :products

Наследование довольно дорогое - и с точки зрения времени выполнения, и часто с точки зрения читабельности.Этот случай звучит как очень простой случай, для которого не требуется наследование.Вы действительно хотите, чтобы продукты и услуги действительно наследовали что-то от базового класса?То, что вы пишете, указывает на то, что вы хотите установить ассоциацию.

1 голос
/ 02 марта 2011

Я бы не использовал ни один, и следовал бы тому, что Мёрре предложил, чтобы InventoryItem был моделью объединения:

class Store
  has_many :inventory_items
  has_many :products, :services, :through => :inventory_items
end

class InventoryItem
  belongs_to :store
  belongs_to :products, :services
end

class Product
  has_many :inventory_items
  has_many :stores, :through => :inventory_items
end

class Service
  has_many :inventory_items
  has_many :stores, :through => :inventory_items
end
...