我想創建一個before_save
回調,只有在三個字段(街道,城市,州)中的任何一個(但不一定是全部)發生變化時纔會運行。你怎麼做到這一點?由於如何使用if語句爲Ruby on Rails中多個更改的字段創建回調?
user.rb
class User
before_save :run_test_method, :if => street_changed?
...
end
我想創建一個before_save
回調,只有在三個字段(街道,城市,州)中的任何一個(但不一定是全部)發生變化時纔會運行。你怎麼做到這一點?由於如何使用if語句爲Ruby on Rails中多個更改的字段創建回調?
user.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?
。
方案二
現代化您的回調一點點,使用塊風格的語法:使用Proc
before_save do
if street_changed? || something_changed? || something_else_changed?
# whatever you currently have in #run_test_method
end
end
你能做到在同一行:
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?}
不知道我是否會調用更爲現代的塊版本 - 我喜歡符號形式的可讀性(當回調本身不是微不足道的) –