Как разделить пользователей на менеджеров и посетителей?

#ruby-on-rails-3

#ruby-on-rails-3

Вопрос:

Сначала вот моя текущая настройка:

модели/user.rb

 class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :confirmable
   has_many :events
end
 

модели/event.rb

 class Event < ActiveRecord::Base
  belongs_to :user
end
 

Таким образом, это работает в том смысле, что у пользователя есть много событий, которые он / она может обрабатывать. Любой, кто не вошел в систему, может только просматривать и перечислять все события.

После этой первоначальной настройки у меня теперь есть другой набор пользователей, которые являются участниками, и текущие пользователи теперь фактически являются менеджерами событий, а не просто обычными пользователями. По сути, теперь у меня есть две модели, которые оба являются пользователями (поскольку они могут как входить в систему / регистрироваться, так и иметь одинаковые поля), и я подумал, что это событие должно выглядеть примерно так:

модели/event.rb

 class Event < ActiveRecord::Base
  belongs_to :manager
  has_many :attendees, :through => :attendance # attendance is a join model
end
 

но я не хочу создавать отдельную таблицу для менеджеров и посетителей, и я подумывал о подклассе пользовательской модели, но я не совсем уверен в том, как это сделать. Я изучал параметры :as и :polymorphic в AR, но я все еще не совсем уверен, как это сделать. Помогите?

Ответ №1:

То, что вы ищете, называется наследованием одной таблицы. Вот один ресурс по этому вопросу. Их гораздо больше. Просто найдите в Google «Rails Single Table Inheritance».