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