我想通过唯一 ID 检查是否已创建记录。如果是,我想在金额属性上加 1。如果不是,我想创建它并将金额属性设置为 1。
我已经有了这个:#@have = current_user.haves.create_or_update_by_id(params[:have])
但我不太确定如何设置正确的金额。
谢谢
我想通过唯一 ID 检查是否已创建记录。如果是,我想在金额属性上加 1。如果不是,我想创建它并将金额属性设置为 1。
我已经有了这个:#@have = current_user.haves.create_or_update_by_id(params[:have])
但我不太确定如何设置正确的金额。
谢谢
使用 ActiveRecord 的increment
方法(文档):
@have = current_user.haves.find_or_initialize_by_id(params[:have])
@have.increment(:amount)
@have.save
如果为 nil,它会将 amount 属性初始化为零,并添加作为 by 传递的值(默认为 1)。如果不是 nil,它只是增加属性值。
我可能会将其分为两个操作。
@have = current_user.haves.find_or_initialize_by_id(params[:have]) do |h|
h.amount = 0
end
@have.amount += 1
@have.save
第一个语句将通过其唯一 ID 查找记录,或使用提供的 ID 和数量设置为 0 初始化新记录。该块仅在初始化时运行,而不是在查找时运行。然后无论最初的状态是什么,我们都会增加数量并将记录保存回数据库。