如果我在ActiveRecord模型中添加after_save回调,然后在该回调上使用update_attribute更改对象,则会再次调用该回调,因此会发生“堆栈溢出”(嘿,无法抗拒)。
是否有可能避免这种行为,可能在执行过程中禁用回调?还是有另一种方法?
谢谢!
最佳答案
一种解决方法是在类中设置一个变量,然后在after_save中检查其值。
这样,它只会尝试保存两次。这可能两次击中您的数据库,这可能是可取的,也可能是不希望的。
我有一种模糊的感觉,就是内置了某些东西,但这是一种非常简单的方法,可以防止几乎所有应用程序中的特定递归点。
我还建议再次查看代码,因为您在after_save中所做的任何事情都应该在before_save中完成。有时候这是不正确的,但很少见。
关于ruby-on-rails - 使用after_save回调修改同一对象,而无需再次触发该回调(递归),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/215885/