我有一个有趣的问题,我的模型的status
枚举属性的行为很奇怪。
我尚未更新status
,但是:
(byebug) status_changed?
true
(byebug) status_change
["submitted_for_review", "submitted_for_review"]
这发生在我的控制器调用以下内容时:
@order.update {"recalculate"=>"true"}
由于错误的status_changed?
,触发了以下回调:
before_save :run_status_callbacks, if: :status_changed?
在其中运行我的debugger
语句,然后在第一块中运行命令。
为什么status
属性即使未被触摸也被检测为已更改?
答案 0 :(得分:1)
我在调试几个小时后发现了问题。这是一行:
validate :can_confirm_order?, if: :status_will_change!
它运行验证,但是有人写了:status_changed?
而不是有条件的:status_will_change!
。
这很难找到,因为它位于验证规则中,说实话,在模型中验证了几十条验证规则之后,您就可以浏览所有这些规则。
自我注意:在代码审查期间要多加注意。