2012-07-17 6 views
25

私は今、しばらくの間、ソースを調べています。以外のコールバック:ActiveRecord::Callbacks::CALLBACKS - これは定数リストです。新しいコールバックを追加しdevise_invitableなどの宝石を使用している場合の意味ActiveRecordコールバックリスト

は、ActiveRecord::Callbacks::CALLBACKSは動作しませんスコア:after:before:invitation_acceptedと呼ばれます。

レールモジュールを開き、モデルクラスごとにコールバックの内部リストがあることを確認する以外に、簡単な修正方法がありますか?

答えて

37

Model._save_callbacksに電話すると、保存時にすべてのコールバックのリストを取得できます。 次に、必要な種類に絞り込むことができます。

Model._save_callbacks.select {|cb| cb.kind == :before} 

Model._destroy_callbacksに同じ作品などあなたは、単にコールバックをトリガしたい場合、あなたは#run_callbacks(kind)メソッドを使用することができることを

+2

はまた、より詳細な情報のためのドキュメントを確認してください。http://apidock.com/rails/ActiveRecord/Callbacks –

3

注:

o = Order.find 123 # Created with SQL 
o.run_callbacks(:create) 
o.run_callbacks(:save) 
o.run_callbacks(:commit) 
17

docsこのような:beforeまたは:after 「合計で19のコールバックがある」と言いますが、それらの19のすべてが実際に何であるかについては言わないようです。

:after_initialize 
:after_find 
:after_touch 
:before_validation 
:after_validation 
:before_save 
:around_save 
:after_save 
:before_create 
:around_create 
:after_create 
:before_update 
:around_update 
:after_update 
:before_destroy 
:around_destroy 
:after_destroy 
:after_commit 
:after_rollback 
+0

ああ、私は彼らを発見しましたリスト[ここ](http://edgeguides.rubyonrails.org/ active_record_callbacks.html)を参照してください。それでも、私はこの答えが将来誰かにGoogleの時間を節約することを願っています。 – GMA

2

あなたはRailsのバージョンで作業している場合:私は、ここ(質問で説明したようにActiveRecord::Callbacks::CALLBACKSを使用しています)のリストだたように、「すべてのActiveRecordのコールバックのリスト」をGoogleで検索する人のために

._save_callbacks方法には、次のように使用することができます。

# list of callback_chain methods that return a CallbackChain 
Model.methods.select { |m| m.to_s.include? "callback" }.sort 

# get all methods in specific call back chain, like after_save 
Model.after_save_callback_chain.collect(&:method)