#ruby-on-rails #ruby #model #polymorphism
#ruby-on-rails #ruby #Модель #полиморфизм
Вопрос:
Допустим, у меня есть модель пользователя, и я хочу иметь разные роли пользователя. В одном приложении вы можете просто сохранить роль в виде строки или в виде другой модели, и это нормально.
Но что, если вы хотите сохранить больше ассоциаций для отдельных моделей? Например, допустим, Adminsсодержит ссылки на коллекции и принадлежит ко многим коллекциям, с которыми обычные пользователи не должны быть связаны? Фактически, другие пользователи будут связаны с совершенно другим набором моделей, которых нет у администраторов.
Помещаем ли мы все ассоциации в объект User и просто игнорируем их в зависимости от типа пользователя? Или мы начинаем создавать подклассы User (как в Hibernate), чтобы содержать только ассоциации и логику модели для этого типа пользователя?
Как это можно сделать в rails? Спасибо!
Ответ №1:
Я бы предложил использовать Rails Single Table Наследование. По сути, у вас будет users
таблица в вашей базе данных и корневая 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
Комментарии:
1. Спасибо! Это похоже на java. Рад слышать, что я могу это сделать 😉