【发布时间】:2021-07-23 22:02:31
【问题描述】:
当我运行model.save(:validate => false) 时,我想运行一个 before_save 回调,但仅在 validate 为 false 时,而不是在它为 true 时。
我知道您可以有条件地运行如下回调:
class Order < ApplicationRecord
before_save :normalize_card_number, if: :paid_with_card?
end
但是如何检查:validate => false 是否被传入?
【问题讨论】:
-
您可以通过覆盖
save方法来解析参数并将validate: false值存储在虚拟属性中,然后在before_saveall 中检查此属性。但这似乎有点过于复杂,可能是 X-Y 问题。为什么需要在代码中调用validate: false?如果它只在应用程序的一个特定部分,也许您可以从那里显式运行回调逻辑(而不是将其挂钩到模型生命周期中)。
标签: ruby-on-rails validation callback