2015-04-07 3 views
2

Итак, я решил использовать MTI для разных пользователей моего приложения. Пользователи имеют различную информацию о том, где я не думаю, что я должен использовать STI, и я хотел, чтобы она была более надежной в будущем. У меня есть приложение построено в рельсах 4 с помощью изобрести что имеет полиморфную ассоциацию для пользователей, сделал как этотМногократное наследование таблиц в Rails 4/Настройка настройки current_user

class User < ActiveRecord::Base 

    belongs_to :rolable, :polymorphic => true 

    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 

    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable, :confirmable, :timeoutable 
end 

с другими классами выглядит как

class User1 < ActiveRecord::Base 
    has_one :user, :as => :rolable 
end 

Это все хорошо и денди, но я я спрашиваю, как установить «current_user» в качестве экземпляра User1? возможно или рекомендуется? Я могу создать новый User1 и обновить атрибут: rolable для пользователя, чтобы включить ссылку на конкретный User1 в консоли, но я не уверен, где его поместить в свой код.

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

Это рекомендуется или есть лучший способ сделать current_user?

Вторая мысль, которую я имел, устанавливала другую переменную и получала тип, используя столбцы в классе User. (rolable_id и rolable_type)

Какой был бы лучший способ? (Я не самый опытный Rails-разработчик)

ответ

0

Для моего проекта я не изменил current_user из экземпляра Devise текущего_user. вместо этого я создал новые объекты для каждого пользователя, когда они мне нужны, и использовал поле id current_user в качестве внешнего ключа для конкретных пользователей. Изменение current_user, вероятно, было не лучшей идеей, потому что тогда я теряю ссылку на таблицу User и информацию в этой таблице. Он отлично работал, чтобы создать объект для каждого пользователя.

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