2012-02-14 4 views
7

Rails 3 앱에 대해 ActiveResource (특히 after_initialize)와 함께 작동하도록 ActiveModel :: Callbacks를 가져 오려고하는데 작동하지 않는 것 같습니다. 오류는 없지만 콜백 메서드는 실행되지 않습니다. 여기 ActiveResource에서 작동하도록 ActiveModel :: Callback 가져 오기

어떤 이유로 코드

class User < ActiveResource::Base 
    extend ActiveModel::Callbacks 
    define_model_callbacks :initialize, :only => :after 

    after_initialize :update_info 

    def update_info 
    puts 'info' 
    end 
end 

의 조각이다는 update_info이 실행되지 않습니다. 누구나 어떻게 작동하는지 알 수 있습니까?

답변

7

누군가가 관심이있는 경우이 설명서를 다시 읽었으며 코드 밑에서 코드가 어떻게 작동했는지에 대한 설명으로 생각했는데이 방법을 재정의해야한다고 나와있는 요구 사항으로 판명되었습니다.

def initialize(attributes = {}, persisted = false) 
    run_callbacks :initialize do 
    super(attributes, persisted) 
    end 
end 

은 기존 방법의 서명을 추적 덮어 쓰기 및 콜백 기능을 추가 할 예정으로 이는 나에게 매우 직관적 보인다 나는에 콜백을 추가했다. 내가 여기서 뭔가를 놓치고 실수로 실수를하기를 바란다. 그러나 나는 다른 해결책을 얻지 못했다.

은 어쨌든, 여기에 모든 AR 클래스에 콜백을 제공하는 원숭이 패치입니다 :

module ActiveResource 
    class Base  
    extend ActiveModel::Callbacks 
    define_model_callbacks :initialize, :only => :after 

    def initialize_with_callback(attributes = {}, persisted = false) 
     run_callbacks :initialize do 
     initialize_without_callback(attributes, persisted) 
     end 
    end 
    alias_method_chain :initialize, :callback 
    end 
end 
+1

이 오히려 실망이다, 그러나 당신이 옳다 나타납니다. https://github.com/rails/rails/blob/master/activemodel/lib/active_model/callbacks.rb – tybro0103