Как можно использовать полиморфные рельсы для объектов, которые действительно имеют поля? - PullRequest
1 голос
/ 10 мая 2011

Допустим, у меня есть модель User, и я хочу иметь разные роли пользователя. В одном приложении вы можете просто сохранить роль в виде строки или другой модели, и это нормально.

Но что, если вы хотите сохранить больше ассоциаций для отдельных моделей? Например, допустим, что администраторы содержат ссылки на коллекции и принадлежат многим коллекциям, с которыми обычные пользователи не должны быть связаны? Фактически, другие пользователи будут связаны с целым рядом других моделей, которых нет у администраторов.

Помещаем ли мы все ассоциации в объект User и просто игнорируем их в зависимости от типа пользователя? Или мы начинаем создавать подклассы User (как в Hibernate), чтобы содержать только ассоциации и логику модели для этого типа пользователя?

Как это сделать в рельсах? Спасибо!

1 Ответ

1 голос
/ 10 мая 2011

Я бы предложил использовать Наследование Rails для одной таблицы .По сути, в вашей базе данных будет таблица users и модель root User.Несколько моделей (по одной на каждую «роль») могут наследоваться от User и иметь свои собственные ассоциации:

# Regular users have no associations
class User < ActiveRecord::Base
end

# Admins have collections and notes
class Admin < User
  has_many :collections
  has_many :notes
end

# Editors only have notes
class Editor < User
  has_many :notes
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...