2010-12-08 3 views
12

어떻게 콜백 명령을 적용 할 수 있습니까? 예를 들어, 당신은 어떻게 Step 1Step 2 전에 발생되도록 않습니다레일즈 콜백에 대한 명령 시행

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 

, 그것은 당신이 보석과 상호 작용하는 방법에 따라 다르지만 가능성은 처음로드 되었기 때문에 그들이 먼저 호출 될 것입니다.

특히 제 3 자 보석을 다룰 때는 def after_save 스타일을 전혀 사용하지 않는 것이 좋습니다.

+0

'def after_save'는 오타였습니다 (예제를 업데이트했습니다). 이 젬은 먼저 호출되지 않습니다 (이것은'paperclip'과 매우 비슷합니다. 그리고 커스텀 콜백 위의'has_attached_file '을 정의하고 있습니다). 주문 시행에 대한 다른 아이디어는 없습니까? –

+0

보석을 뽑은 후 주문을 수리 할 수있었습니다. 당신은 정의의 순서가 중요하다는 점에서 옳습니다! 감사! –

관련 문제