我在用户和电子钱包之间有一个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
它会添加一个新条目,并从第一个条目中删除用户ID。
答案 0 :(得分:0)
使用find_or_create_by_
User.wallet.find_or_create_by_key("key1")
它将检查记录是否已经存在,否则它将创建一个新记录。
答案 1 :(得分:0)
查看用户是否已拥有钱包,然后进行构建,如下所示:
wallet_attrs = {key: "key1"}
@wallet = User.last.wallet || User.last.build_wallet(wallet_attrs)
@wallet.save
答案 2 :(得分:0)
您可以在模型中设置验证:
validates_uniqueness_of :key, :message => "This key is already present."