gpt4 book ai didi

ruby-on-rails - 使用 first_or_create 时 nilClass 的未定义方法 '+'

转载 作者:太空宇宙 更新时间:2023-11-03 17:29:25 24 4
gpt4 key购买 nike

我有一个在记录上使用 first_or_create 的函数,如果它存在,我需要能够在它的一个属性上使用 +

Blob.where(user_id: user.id, item_id: item.id).first_or_create do |s|
s.amount += amount
end

但是,如果记录不存在,我不能使用+。这是语法问题还是我使用了 first_or_create

最佳答案

该 block 仅在创建 对象(尚未找到)时调用。如果模型没有给定字段的默认值,它将尝试在 nil 值上调用 +。您可以按照这些思路做一些事情(可能有更好的方法):

blob = Blob.where(user_id: user.id, item_id: item.id).first_or_create
blob.amount += amount if blob.amount.present?

在这种情况下,如果对象已经存在(根据您的描述,这似乎是您的目标),您只执行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

在上面的例子中,如果一个对象存在那么它会将amount添加到当前值,否则它会用0初始化属性然后添加金额

关于ruby-on-rails - 使用 first_or_create 时 nilClass 的未定义方法 '+',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50439576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com