1

我想通过唯一 ID 检查是否已创建记录。如果是,我想在金额属性上加 1。如果不是,我想创建它并将金额属性设置为 1。

我已经有了这个:#@have = current_user.haves.create_or_update_by_id(params[:have])但我不太确定如何设置正确的金额。

谢谢

4

2 回答 2

2

使用 ActiveRecord 的increment方法(文档):

@have = current_user.haves.find_or_initialize_by_id(params[:have])
@have.increment(:amount)
@have.save

如果为 nil,它会将 amount 属性初始化为零,并添加作为 by 传递的值(默认为 1)。如果不是 nil,它只是增加属性值。

于 2012-07-27T15:01:05.000 回答
1

我可能会将其分为两个操作。

@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 初始化新记录。该块仅在初始化时运行,而不是在查找时运行。然后无论最初的状态是什么,我们都会增加数量并将记录保存回数据库。

于 2012-07-27T14:56:05.510 回答