Вы можете создавать различные 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 (наследование одной таблицы) для пользовательских типов.Но это не очень хорошо масштабируется, если поля пользовательских типов резко отличаются.