2012-05-01 13 views
11

私はbefore_filterがRailsのコントローラのためだけであることは知っていますが、私はモデルのためにこういうものを望みます:モデルのメソッドが呼び出されるときはいつでも、呼び出されたメソッドを実行する必要があるかどうかを判断するメソッド。概念的には、このような何か:私は@ website.method1を呼び出すとき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 

だから、それは最初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

Cool :)モデル全体に​​繰り返しパターンがある場合は、おそらくモジュールに要素を抽出することについて考えることができます。ちょっとした考え。 – Robin

1

私はこれのために宝石を作りました。

Rubyクラスにプラグインすることができ、コントローラのようなことができます。

before_action :foobar, on: [:foo] 

https://github.com/EdmundLeex/action_callback

関連する問題