2012-10-03 84 views
1

我想繪製兩個Rails模型之間的關係,其中一方可以是optionnal。讓我來更精確...Rails:在ActiveRecord中建模可選關係

我有兩個模型:Profile,存儲用戶配置文件信息(名稱,年齡,...)和User模型,存儲用戶訪問應用程序(電子郵件,密碼,... )。

爲了給您提供更多信息,User模型由Devise gem負責註冊/登錄。

這裏是我的應用程序的情景:

1 /當用戶註冊,一個新行中User表中創建並且在Profile表等效。這導致了下面的腳本:

class User < ActiveRecord::Base 
    belongs_to :profile 
end 

2/A用戶可以創建它的資料,而不需要登記(一種公共信息的公衆形象的),所以在Profile某行不具有一定是User行等價(這裏是可選關係,UML中的0..1關係)。

問題:什麼是相應的腳本就擺在class Profile < AR::BaseUser可選地圖?

在此先感謝。

+0

只是不要將其分配給用戶? – varatis

+0

我必須指定它,因爲它可以幫助我在「用戶」信息存在時得到它。 – htaidirt

+0

默認情況下它是可選的。如果它沒有被分配,那麼你會得到零,就像@Doon所說的那樣。 – varatis

回答

4
class Profile << ActiveRecord::Base 
    has_one :user 
end 

所有AR關係都是可選的(至少在默認情況下 - 我不確定是否可以堅持它們存在)。如果您要求profile.user其中沒有設置關係,則您只需返回nil

+3

你可以通過設置一個非空約束的外鍵,並使用validates_associated .. – Doon

+0

因此,'has_one'並不意味着「有嚴格的1」但「有高達1」(其中是指0還是1)? – htaidirt

+0

@Doon - 很高興知道,謝謝。 – Chowlett