2015-04-06 64 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."