Подклассы в Rails-моделях и ActiveRecord - PullRequest
2 голосов
/ 26 октября 2011

Я программирую веб-приложение типа электронной коммерции (не совсем, но чтобы дать вам идею).Я буду отображать различные типы продуктов, которые имеют мало общего друг с другом, но я хотел бы иметь родительский класс Product, иметь общее представление для всех подклассов, а также разделить некоторые поля и поведения.

Но это вызывает у меня много вопросов, особенно в отношении ActiveModel: у продукта не должно быть своей собственной таблицы, но я бы хотел, чтобы некоторые поля в его подклассах (гостиница, ресторан и т. Д.) Унаследовали эти поля от него.Как бы я поступил так?

Еще одна причина иметь родительский класс Product заключается в том, что в конечном итоге мне потребуется использовать Product.all и другие области действия объектов класса.

Может быть, яполностью сбит с толку, поэтому не стесняйтесь предложить любой способ сделать это.Может быть, с помощью модуля?

1 Ответ

6 голосов
/ 26 октября 2011

Во-первых, наследование подразумевает, что поля наследуются; следовательно, вы не просто получаете некоторые поля , вы получаете все поля для родительского класса в подклассе.

Вы можете достичь желаемого несколькими способами:

  • Создайте модуль, поместите в него все ваши общие методы и включите его в каждую модель
  • Используйте set_table_name в подклассе, чтобы маршрутизировать модель для использования другой таблицы. Это полезно, если у вас есть несколько таблиц, которые имеют те же поля, что и ваша таблица product.
  • Если ваши модели используют одну и ту же таблицу, но отличаются, скажем, таким атрибутом, как product_type, вы можете использовать default_scope, чтобы всегда применять условие, такое как default_scope where(:product_type => :hotel)

Используйте API в качестве справочного материала для использования вышеупомянутых методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...