2012-07-22 91 views
4

我的rails應用程序中有一個用戶模型。它只有一個名稱屬性以及通過Devise登錄的電子郵件&。我想爲用戶創建一個模型配置文件。我應該如何創建它。通過將配置文件屬性添加到現有的用戶模型或創建模型配置文件並向其添加belongs_to關聯。在rails中爲用戶模型創建配置文件

+0

就個人而言,如果配置文件數據相對穩定,我會創建一個配置文件模型並向它添加belongs_to,或者可能爲用戶添加has_one。 – thisfeller 2012-07-22 18:44:11

回答

5

那麼,這取決於你的要求。

如果用戶只能有一個profile,並且您只是要添加一些與user相關的屬性,則沒有理由爲其創建新的類。

但是,即使用戶只能擁有一個配置文件,也可能需要執行一些normalisations。如果是這樣,您可以從users表中刪除一些屬性以創建表profiles,並且您將擁有一對一的關係。

class User < ActiveRecord::Base 
    has_one :profile 
end 

class Profile < ActiveRecord::Base 
    belongs_to :user 
end 

那麼......根據您的要求,您可能會遇到用戶可能擁有多個配置文件的情況。如果是這樣的話:

class User < ActiveRecord::Base 
    has_many :profiles 
end 

class Profile < ActiveRecord::Base 
    belongs_to :user 
end 

總之,沒有對錯之分......它取決於您的要求,以及您的設計決定。

+0

是否可以創建一個配置文件模塊並將其包含到用戶模型中,因爲我想爲不同類型的用戶創建配置文件,例如學生,老師,校長,哪些會有一些共同的屬性和一些彼此不同? – Metal 2012-07-22 19:12:27

+0

不是真的......你可以在其他情況下使用模塊和繼承。例如,如果你有以下類:'學生','老師','工作人員'等,他們都有comum中的東西,比如'name','age'等等,並且與其他表的關係是不同。在這種情況下,您可以使用模塊或繼承來避免在每個類中添加所有comum屬性。然而,在你的情況下,我不認爲你需要它..你可以添加一個屬性'type'來指定訪問級別(我認爲它是你想要的)。所以,如果current_user有類型的學生,你可以阻止一些動作... – gabrielhilal 2012-07-22 19:42:21

+0

但是,如果'student','teacher'和'principal'具有不同的行爲,那麼......你應該考慮不同的類...... – gabrielhilal 2012-07-22 19:44:27

6

向您的用戶模型添加更多屬性會讓您的用戶對象有點沉重,因爲您經常會調用該對象,因此這不是最好的想法。例如,要驗證用戶,您不需要加載配置文件屬性,如current_user helper所在的位置或出生日期。因此,最好是在一個單獨的模型中提取配置文件屬性,並採用gabreilhilal的方法。