我试图这样做,以便当用户更改两个布尔变量(buyer
和seller
中的任何一个时,可以在任一方向更改它们以触发操作)它将将第三个变量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
错误是由无限循环或递归引起的,我无法找到。谁能看到我出错的地方?
答案 0 :(得分:6)
处理此问题的两种方法:
after_update :reset_confirmed
def reset_confirmed
self.update_column(:status_confirmed, false) if self.buyer_changed? || self.seller_changed?
end
update_attribute
和update_column
之间的区别对您有帮助,因为后者skips
回调(如果有的话)。
OR
before_save :reset_confirmed
def reset_confirmed
self.status_confirmed = false if self.buyer_changed? || self.seller_changed?
end
在这里,您只需在将值保存到db之前指定一个值,所以......
希望有所帮助......