Наследование модели рельсов - PullRequest
22 голосов
/ 21 июня 2011

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

Ответы [ 2 ]

26 голосов
/ 21 июня 2011

Вам нужно будет создать таблицу со всеми полями, а также указать столбец типа.то есть

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', он также нашел бы пользователей.

13 голосов
/ 21 июня 2011

Вы хотите наследование одной таблицы , описанное по ссылке Алексом Райснером.STI использует одну таблицу для представления нескольких моделей, которые наследуют от базовой модели.В мире Rails схема базы данных имеет столбец, в котором указывается тип модели, представленной строкой.При добавлении столбца с именем type в миграцию базы данных Rails делает вывод, что таблица использует STI, хотя столбец может быть произвольным именем, если вы указываете имя в модели данных (см. метод класса 'inheritance_column' ).Обратите внимание, что это делает type зарезервированным словом.

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