Rails堆栈级别太深使用after_update方法

我试图这样做,以便如果用户更改两个布尔变量( buyerseller ,它们可以在任一方向更改以触发操作),它将重置第三个变量status_confirmed的状态为false

我的user模型中有以下内容:

 after_update :reset_confirmed def reset_confirmed if self.buyer_changed? || self.seller_changed? self.update_attributes(status_confirmed: false) end end 

从我可以理解的stack level too deep错误是由于无限循环或递归,我找不到。 谁能看到我哪里出错了?

有两种方法可以处理:

 after_update :reset_confirmed def reset_confirmed self.update_column(:status_confirmed, false) if self.buyer_changed? || self.seller_changed? end 

update_attributeupdate_column之间的区别对你有帮助,因为后者会skips回调(如果有的话)。

要么

 before_save :reset_confirmed def reset_confirmed self.status_confirmed = false if self.buyer_changed? || self.seller_changed? end 

在这里,您只需在将值保存到db之前指定一个值,所以……

希望能帮助到你..