gpt4 book ai didi

ruby-on-rails - 在 after_commit 中更新属性时防止无限循环,:on => :create

转载 作者:行者123 更新时间:2023-12-04 02:58:49 24 4
gpt4 key购买 nike

当我需要在 after_commit, :on => :create 期间更新属性时,我创建了一个无限回调循环.但是,仅当我需要在此回调期间更新对象的属性时才会发生这种情况。有没有办法防止这种情况?我可以以某种方式强制模型重新加载自己,以便它知道它正在执行更新而不是创建吗?

class Doc < ActiveRecord::Base
after_commit :generate, :on => :create

...

def generate
# some logic here that requires this model to be saved in the db

self.update_attributes(:filename => filename) # Infinite loop begins here.
end
end

最佳答案

您可以使用方法update_column这将跳过模型的所有回调:

self.update_column(:filename, filename)

或者你可以使用方法 update_all , 遵循相同的行为
self.class.where('id = ?', self.id).update_all(:filename => filename)

最后但并非最不重要的是,我个人最喜欢的:
self.filename = filename
self.send(:update_without_callbacks)

这个很清楚,所有的回调都被忽略了,这是非常有帮助的

此外,作为另一种选择,您可以使用 after_create而不是 after_commit如果你想运行 generate仅在保存新记录时的方法

关于ruby-on-rails - 在 after_commit 中更新属性时防止无限循环,:on => :create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22567358/

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