2015-04-06 76 views
0

我在用戶和電子錢包之間有一個has_one關係。Rails不要建立兩次has_one關係

#User 
has_one :wallet 

#Wallet 
belongs_to :user 
validates :user, allow_blank: true, uniqueness: true 
validates :key, presence: true 
validate :address, if: valid_address? 

def valid_address? 
stuff 
end 

我想阻止重新構建一個預先構建的錢包。

因爲如果我這樣做User.last.build_wallet。(關鍵:「KEY1」)保存 我會在我的分貝

id key  address user_id created_at 
1 test1 NULL 1  2015-04-06 09:38:54 2015-04-06 09:38:55 

但是,如果我重新以同樣的方式我將有一個第二條目

id key  address user_id created_at 
1 test1 NULL NULL 2015-04-06 09:38:54 2015-04-06 09:38:55 
2 test1 NULL 1  2015-04-06 09:38:54 2015-04-06 09:38:55 

它將添加我的一個新條目,並從第一個用戶標識中刪除。

回答

0

使用find_or_create_by_

User.wallet.find_or_create_by_key("key1") 

它會檢查記錄是否已經存在,如果沒有它會創建一個新的。

0

檢查用戶已經有一個錢包,然後建立,就像這樣:

wallet_attrs = {key: "key1"} 
@wallet = User.last.wallet || User.last.build_wallet(wallet_attrs) 
@wallet.save 
0

您可以在模型中設置驗證:

validates_uniqueness_of :key, :message => "This key is already present."