cal*_*eld 1 ruby ruby-on-rails
我有一个在记录上使用的函数first_or_create,并且我需要能够+在它存在的情况下使用它的属性之一。
Blob.where(user_id: user.id, item_id: item.id).first_or_create do |s|
s.amount += amount
end
Run Code Online (Sandbox Code Playgroud)
+但是,如果记录不存在,我就无法使用。这是语法问题还是我的使用问题first_or_create?
仅当创建新对象(尚未找到)时才会调用该块。如果模型没有给定字段的默认值,它将尝试调用+一个nil值。你可以按照这些思路做一些事情(可能有更好的方法):
blob = Blob.where(user_id: user.id, item_id: item.id).first_or_create
blob.amount += amount if blob.amount.present?
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您仅在sum对象已经存在时才执行(根据您的描述,这似乎是您的目标)。如果您想在任何情况下应用金额总和,则可以将金额初始化为0(如果记录尚不存在):
blob = Blob.where(user_id: user.id, item_id: item.id).first_or_create do |b|
b.amount = 0
end
blob.amount += amount
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,如果一个对象存在,那么它将添加amount到当前值,否则它将初始化属性0,然后添加amount到它。
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |