Два разных типа профиля - PullRequest
3 голосов
/ 26 марта 2011

Допустим, у вас есть две разные категории пользователей с разными профилями: одна для музыкальных исполнителей и одна для слушателей. Профили для каждого имеют несколько перекрывающихся атрибутов и несколько различных атрибутов. Если у вас есть отдельные модели для каждого профиля? Или вы просто должны иметь столбец двоичных данных в пользовательской таблице для того, является ли пользователь художником или нет? Как это будет структурировано?

Ответы [ 2 ]

3 голосов
/ 26 марта 2011

Вы можете использовать Single Table Inheritance, чего можно достичь, создав подклассы модели.

Создание модели Profile со столбцом type:string ( Имя может быть переопределено ):

$ rails g model Profile type:string

Теперь в profile.rb создайте подкласс для вашей модели:

class Profile < ActiveRecord::Base
  # Common profile attributes
end

class Artist < Profile
  # Things specific to an artist profile
end

class Listener < Profile
  # Things specific to a listener profile
end

Когда вы создадите Artist или Listener, он будет сохранен втаблица profiles вместе с типом профиля.

Например, если вы сделаете Artist.create, он будет сохранен в таблице profiles с type='Artist'.

Когда вы извлекаете запись, она будет возвращена в соответствующей модели, будь то Artist, Listener или универсальный Profile.

Для получения дополнительной информации об этой технике, посмотрите на этот вопрос .

Этот пост в блоге также хорошо объясняет его.

0 голосов
/ 26 марта 2011

Один профиль по умолчанию, называемый Profile, содержащий общие атрибуты и две другие (Artistic, Listener) модели с конкретными атрибутами каждого из них

А в Profile, используйте поле для сохранения типа (художественный или слушатель)

Просто мой обозреватель.

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