2012-10-15 38 views

回答

10

方案一

您可以創建等的方法:

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 
+2

不知道我是否會調用更爲現代的塊版本 - 我喜歡符號形式的可讀性(當回調本身不是微不足道的) –

8

你能做到在同一行:

class User 
    before_save :run_test_method, :if => Proc.new { |u| u.street_changed? || u.city_changed? || u.state_changed? } 

    ... 
end 
0

您也可以使用lambda

before_save :run_test_method, if: ->(u) {u.street_changed? || u.something_changed? || u.something_else_changed?} 
相關問題