2010-12-08 4 views
12

コールバックの注文をどのように実施できますか?たとえば、どのようにStep 1Step 2前に起こっていることを確認します:Railsコールバック注文を実施する

after_save do 
    logger.info "Step 1" 
end 

after_save do 
    logger.info "Step 2" 
end 

私の実際の例では、サードパーティ製の宝石を使用して、彼らは自分自身のコールバックの前に(彼らはコールバック上で動作)が完了していることを確実にすることにも関します。同じコールバックを使用する必要があります(つまり、beforeafterの組み合わせは使用できません)。

ありがとうございます!

答えて

17

クラスレベルのコールバックを使用する場合は、定義された順序でコールされます。サードパーティ製の宝石用

class Foo < ActiveRecord::Base 

    after_save :step1 
    after_save :step2 

private 

    def step1 
    # stuff 
    end 

    def step2 
    # stuff 
    end 
end 

、それはあなたが宝石と対話する方法に依存しますが、オッズは、彼らが最初にロードされたので、彼らが最初に呼び出されますされています。

特に、サードパーティ製の宝石を扱う場合は、def after_saveスタイルを使用することはまったく推奨されません。

+0

'def after_save'はタイプミスです(私はこの例を更新しました)。この宝石は最初に呼び出されていません(これは 'paperclip'と非常によく似ており、私のカスタムコールバックの上に' has_attached_file'を定義しています)。注文を実施する他のアイデアは? –

+0

宝石をフォークした後、私は注文を修正することができました。定義の順番が重要であるという点であなたは正しいです!ありがとう! –

関連する問題