2012-02-14 4 views
7

私はActiveModel ::コールバックのRails 3アプリケーションのためのActiveResource(特にafter_initialize)で動作するように取得しようとしていますで動作するように、私はそれが仕事を得るように見えることはできません。エラーは発生しませんが、コールバックメソッドは決して実行されません。ここで取得ActiveModel ::コールバックは、ActiveResource

が何らかの理由コード

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

誰もが興味を持っている場合は、I本の再読ドキュメンテーション、そして私はコードはカバーの下に働いていた方法の説明だと思ったが、私はメソッドをオーバーライドする必要があると述べた要件であることが判明私はへのコールバックを追加しました:

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

関連する問題