Если у меня есть Пользователь, и я хочу делать разные типы пользователей, скажите, что только обычные пользователи имеют только электронную почту и подписчиков, у которых есть поле веб-сайта, как я могу сделать подписчиков наследовать все от Пользователей только добавленным полем?
Наследование модели Rails
Ответ 1
Вам нужно будет создать таблицу со всеми полями, а также указать столбец типа. то есть
create_table :users do |t|
t.string :email
t.string :website
t.string :type
end
Тогда вы можете иметь такие классы, как
Class User < ActiveRecord::Base
Class Subscriber < User
Абонент будет наследовать все из модели Users. Столбец типа там, чтобы вы могли отличить от разных моделей. Например, используя
Subscriber.all
Будет получать только подписчиков, где, как если бы вы не использовали столбец "type", он также нашел бы пользователей.
Ответ 2
Вы хотите однонаправленное наследование таблицы, описанное по ссылке Alex Reisner. STI использует единую таблицу для представления нескольких моделей, которые наследуются от базовой модели. В мире Rails схема базы данных имеет столбец, который определяет тип модели, представленной этой строкой. Добавление столбца с именем type
в миграции базы данных приводит к тому, что Rails делает вывод, что таблица использует STI, хотя столбец может быть произвольным именем, если вы укажете имя в модели данных (см. метод класса "inheritance_column" ). Обратите внимание, что это делает type
зарезервированное слово.