轨。 保存时更新模型属性

认为这是一项简单的任务,但我对这个问题有点担心:

想要在模型保存时更新模型的其中一个属性,从而在模型中进行回调:

 after_save:calculate_and_save_budget_contingency

 def calculate_and_save_budget_contingency
   self.total_contingency = self.budget_contingency + self.risk_contingency
   self.save
   #=>这不起作用.... self.update_attribute:budget_contingency,(self.budget_accuracy * self.budget_estimate)/ 1
结束

并且网络服务器回显消息ActiveRecord::StatementInvalid (SystemStackError: stack level too deep: INSERT INTO "versions"

这基本上告诉我有一个infite循环保存到模型, 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 

原因是 – 如果你在after_save运行保存,你最终会进入无限循环:一个保存调用after_save回调,它调用保存调用after_save,哪个…

一般来说,只有在更改相关模型等时才使用保存。

尝试before_save或before_validation,但不要包含.save