在我的 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/