Рубин на рельсах с разными типами пользователей - PullRequest
1 голос
/ 06 апреля 2010

Я пытаюсь создать приложение, которое имеет разных типов пользователей, я использую authlogic для аутентификации пользователей.

Итак, у меня есть одна пользовательская модель, у которой есть обязательное поле для authlogic, чтобы творить чудеса. Теперь я хочу добавить пару разных моделей, которые описывают дополнительные поля для разных типов пользователей.

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

Каков наилучший способ сделать это? В настоящее время я изучаю полиморфные модели, но я не уверен, что это лучший путь. Любая помощь будет принята с благодарностью, спасибо.

Ответы [ 2 ]

6 голосов
/ 06 апреля 2010

Вы можете создавать различные profile таблицы и просто привязывать профиль к пользователю.Таким образом, для каждого типа пользователя вы можете создать таблицу и сохранить в ней определенную информацию и иметь столбец user_id, указывающий на users.

class User < ActiveRecord::Base
  has_one :type_1
  has_one :type_2
end

class Type1 < ActiveRecord::Base
  belongs_to :user
end

class Type2 < ActiveRecord::Base
  belongs_to :user
end

.к проблемам, если вы постоянно добавляете типы пользователей.Таким образом, вы можете взглянуть на полиморфизм.

Для полиморфизма таблица users будет определять тип пользователя (profileable_id и profileable_type).Итак, что-то вроде этого:

class User < ActiveRecord::Base
  belongs_to :profileable, :polymorphic => true
end

class Type1 < ActiveRecord::Base
  has_one :user, :as => :profileable
end

class Type2 < ActiveRecord::Base
  has_one :user, :as => :profileable
end

Затем существует третий вариант STI (наследование одной таблицы) для пользовательских типов.Но это не очень хорошо масштабируется, если поля пользовательских типов резко отличаются.

0 голосов
/ 26 ноября 2014

лучший подход я видел здесь http://astockwell.com/blog/2014/03/polymorphic-associations-in-rails-4-devise/

...