Ruby on rails Rails不会构建两次has__-one关系

Ruby on rails Rails不会构建两次has__-one关系,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我在用户和钱包之间有一种“一对一”的关系 #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
 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\u walletkey:key1.save 我的数据库里有

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
它将添加一个新条目,用户id将从第一个条目中删除。

使用“查找”或“创建”


它将检查记录是否已经存在,如果不存在,它将创建一个新记录。

查看用户是否已经有钱包,然后构建,如下所示:

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

您可以在模型中设置验证:

验证:key,:message=>的唯一性该键已存在

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