2012-02-14 9 views
7

Estoy tratando de hacer que ActiveModel :: Callbacks trabaje con ActiveResource (específicamente after_initialize) para una aplicación de Rails 3, pero parece que no puedo hacer que funcione. No recibo ningún error, pero el método de devolución de llamada nunca se ejecuta.Obteniendo ActiveModel :: Callbacks para trabajar con ActiveResource

Aquí es un fragmento de código

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

    after_initialize :update_info 

    def update_info 
    puts 'info' 
    end 
end 

Por alguna razón, el update_info nunca se ejecuta. ¿Alguien tiene alguna idea de cómo hacer que esto funcione?

Respuesta

7

En caso de que alguien esté interesado, volví a leer la documentación sobre esto, y lo que pensé que era una explicación de cómo funcionaba el código bajo las sábanas, resultó ser un requisito que indicaba que debía anular el método yo estaba añadiendo a las devoluciones de llamada:

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

Esto parece muy contrario a la intuición para mí, ya que se espera que para localizar a la firma del método existente, sobrescribir, y agregar la funcionalidad de devolución de llamada. Espero que me esté perdiendo algo aquí, y simplemente cometer un error, pero no he encontrado ninguna otra solución para trabajar.

De todas formas, aquí es un parche mono para proporcionar esta devolución de llamada a todas las clases 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

Esto es bastante decepcionante, pero parece que tiene razón. https://github.com/rails/rails/blob/master/activemodel/lib/active_model/callbacks.rb – tybro0103

Cuestiones relacionadas