Подтвердить что ты не робот

Наследование модели Rails

Если у меня есть Пользователь, и я хочу делать разные типы пользователей, скажите, что только обычные пользователи имеют только электронную почту и подписчиков, у которых есть поле веб-сайта, как я могу сделать подписчиков наследовать все от Пользователей только добавленным полем?

4b9b3361

Ответ 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 зарезервированное слово.