2012-05-01 72 views
11

我知道before_filter只適用於Rails中的控制器,但是我希望模型能夠這樣:任何時候調用模型中的某個方法,我想運行一個方法來確定被調用的方法是否應該運行。從概念上講,這樣的事情:Rails模型「before_filter」?

class Website < ActiveRecord::Base 
    before_filter :confirm_company 

    def confirm_company 
    if self.parent.thing == false? 
     return false 
    end 
    end 

    def method1 
    #do stuff 
    end 

end 

所以,當我打電話@ website.method1,它會先調用confirm_company,如果我返回false,將不會運行方法1。 Rails是否具有這樣的功能?我希望我只是錯過了一些東西很明顯這裏...

+1

你的意思[Active Record的回調(http://guides.rubyonrails.org/active_record_validations_callbacks.html#callbacks-overview)? – Mischa

+0

是的,我想,回調是我需要的。但沒有可用的回調可以做我以後的事情。我不保存,驗證,初始化...我正在調用一種方法。 –

+0

如果您的條件得到滿足,您可以使用代理對象並將代表委託給模型 – apneadiving

回答

12
class MyModel 
    extend ActiveModel::Callbacks 
    define_model_callbacks :do_stuff 

    before_do_stuff :confirm 

    def do_stuff 
     run_callbacks :do_stuff do 
      #your code 
     end 
    end 

    def confirm 
     #confirm 
    end 
end 

我真的不知道這會的工作,但你可以嘗試一下,因爲我真的不現在有時間。看看那個:http://api.rubyonrails.org/classes/ActiveModel/Callbacks.html

+0

這完全按照您的說法運行。它要求我觸摸每一個模型,但這是一個非常乾淨的解決方案,所有事情都考慮在內。非常感謝! –

+0

酷:)如果你的模型中有復發模式,你也許可以考慮將東西抽取到模塊中。只是一個想法。 – Robin