我正在努力做到这一点,如果用户更改了两个 bool 变量(buyer
和 seller
)中的任何一个,它们可以在任一方向进行更改以触发action) 它将第三个变量 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_attribute
和 update_column
之间的区别会对您有所帮助,因为后者 skips
回调(如果有)。
或
before_save :reset_confirmed
def reset_confirmed
self.status_confirmed = false if self.buyer_changed? || self.seller_changed?
end
在这里,您只是在将其保存到 db 之前分配一个值,所以...
希望对你有帮助..
关于ruby-on-rails - 使用 after_update 方法的 Rails 堆栈级别太深,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43797001/