我想创建一个before_save
回调,只有在三个字段(街道、城市、州)中的任何一个(但不一定是全部)发生更改时才会运行。你怎么做到这一点?谢谢
用户.rb
class User
before_save :run_test_method, :if => street_changed?
...
end
我想创建一个before_save
回调,只有在三个字段(街道、城市、州)中的任何一个(但不一定是全部)发生更改时才会运行。你怎么做到这一点?谢谢
用户.rb
class User
before_save :run_test_method, :if => street_changed?
...
end
选项一
您可以创建一个方法,如:
def ok_to_run_test_method?
street_changed? || something_changed? || something_else_changed?
end
然后使用:
before_save :run_test_method, :if => :ok_to_run_test_method?
注意:ok_to_run_test_method?
符号如何。不确定这是否是拼写错误,但在您的问题中,您实际上是在调用类方法street_changed?
。
选项二
稍微现代化你的回调并使用块式语法:
before_save do
if street_changed? || something_changed? || something_else_changed?
# whatever you currently have in #run_test_method
end
end
您可以使用以下命令在一行中完成Proc
:
class User
before_save :run_test_method, :if => Proc.new { |u| u.street_changed? || u.city_changed? || u.state_changed? }
...
end
您还可以使用lambda
:
before_save :run_test_method, if: ->(u) {u.street_changed? || u.something_changed? || u.something_else_changed?}