认为这是一项简单的任务,但我对这个问题有点坚持:
希望在保存模型时更新模型的属性之一,从而在模型中进行回调:
after_save :calculate_and_save_budget_contingency
def calculate_and_save_budget_contingency
self.total_contingency = self.budget_contingency + self.risk_contingency
self.save
# => this doesn't work as well.... self.update_attribute :budget_contingency, (self.budget_accuracy * self.budget_estimate) / 1
end
网络服务器返回消息ActiveRecord::StatementInvalid (SystemStackError: stack level too deep: INSERT INTO "versions"
这基本上告诉我模型的保存存在无限循环,after_save
然后我们再次保存模型...这会进入另一个循环saving
该模型
刚好卡在这个模型属性计算的时间点上。如果有人遇到过这个问题,并且有一个很好的漂亮/rails解决方案,请在下面给我留言,谢谢
将您的代码更改为以下内容
before_save :calculate_and_save_budget_contingency
def calculate_and_save_budget_contingency
self.total_contingency = self.budget_contingency + self.risk_contingency
end
原因是 - 如果你运行 save inafter_save
你最终会陷入无限循环:保存调用 after_save 回调,后者调用 save,后者调用 after_save,后者...
一般来说,明智的做法是仅在更改关联模型等时使用“保存后”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)