2015-04-07 137 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

对于我的项目,我没有更改Devise的current_user实例中的current_user。相反,当我需要它们时,我为每个用户创建了新对象,并使用current_user的id字段作为特定用户的外键。更改current_user可能并不是最好的主意,因为那时我失去了对用户表和该表中信息的引用。它工作得很好,为每个用户创建一个对象