2010-04-06 4 views
1

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

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

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

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

ответ

5

Вы можете создать разные таблицы 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

Спасибо, тот довольно много, что я сделал по отношению к полиморфным и, кажется, работает Allright, проблема в том, однако, что я не могу за жизнь мне понять, как обрабатывать раскрывающееся окно, где пользователь выбирает свой тип пользователя, как я могу связать это так, чтобы модели работали нормально? – Pallinder

+0

Это совершенно другой вопрос :) Но я бы сделал это вручную в контроллере. Имейте «select_tag» с доступными типами, затем в методе create/update проверьте параметр, создайте/обновите соответствующий тип и сохраните. –

+0

Спасибо, куча, я подумал, что это был способ сделать это, но потом я подумал, что может быть один из тех хороших «рельсовых» способов сделать это hehe – Pallinder

Смежные вопросы