gpt4 book ai didi

ruby-on-rails - 在创建后回调中更新属性会导致更新整个记录

转载 作者:行者123 更新时间:2023-12-03 16:04:25 25 4
gpt4 key购买 nike

在我的 Rails 应用程序中,我尝试使用 update_attribute 更新模型的属性。在 after_create打回来。我可以成功更新属性,但由于某种原因,当我这样做时,模型的所有其他属性也会更新。因此,即使模型的名称属性(例如)没有更改,它也会在数据库更新查询中设置(设置为当前值)。

这是 Rails (2.3.8) 中的预期行为,还是我做错了什么?

最佳答案

是的,我相信这是一致的行为,因为刚刚创建的模型实例尚未重新加载。因此,“已更改”属性尚未重置。

对不起,如果这不是一个非常清楚的解释。为了演示,请在您的 after_create 方法中运行调试器。例如。

def my_after_save_callback
require 'ruby-debug'; debugger
update_attribute(:foo, "bar")
end

然后当调试器开始运行时:
p self.changed

将返回已为此对象修改的所有属性的数组。 ActiveRecord 将在下次保存对象时更新所有这些属性。

解决此问题的一种方法是在更新属性之前重新加载对象。
def my_after_save_callback
reload
update_attribute(:foo, "bar")
end

这将重置“已更改”属性,并且只有您修改的特定属性会在 SQL 查询中更新。

希望这是有道理的:-)

关于ruby-on-rails - 在创建后回调中更新属性会导致更新整个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3619536/

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