2015-04-07 98 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可能並不是最好的主意,因爲那時我失去了對用戶表和該表中信息的引用。它工作得很好,爲每個用戶創建一個對象