Callbacks personalizados para un observer


#1

Estaba intentando crear un observer que se disparase después de la
llamada a un método de mi modelo…

Pero resulta que los observes sólo pueden activarse antes o después de
los callbacks oficiales:

Y no antes o después de cualquier método mio, como
‘Carrito.marcar_como_pagado’

Mi pregunta es si esto es así o hay alguna aproximación oficial para
que mi observer se active con un método como este:

  • def after_marcar_como_pagado

He encontrado un parche muy ingenioso que resuelve mi
petición
*
http://alexkira.blogspot.com/2008/10/custom-observer-callbacks-in-rails.html

Pero me preguntaba si había algo oficial… porque, desde mi punto de
vista es bastante útil… :confused:

f.


#2

2009/3/7 Fernando G. removed_email_address@domain.invalid:

Mi pregunta es si esto es así o hay alguna aproximación oficial para

f.

Recordaba algo de que habían limpiado lo de los callbacks, creo que es
lo que buscas:

http://apidock.com/rails/ActiveSupport/Callbacks

Suerte.


#3

Hola Dani

El día 7 de marzo de 2009 20:20, Daniel R.
Troitiñoremoved_email_address@domain.invalid
escribió:> 2009/3/7 Fernando G. removed_email_address@domain.invalid:

Recordaba algo de que habían limpiado lo de los callbacks, creo que es
lo que buscas:

http://apidock.com/rails/ActiveSupport/Callbacks

No veo en ese ejemplo que usen callbacks customizados, todos los que
salen son con el save: before/after

Hablan de herencia y tal… pero no de crear callbacks a medida.

Yo lo que quiero es que si tengo este método:

def marcar_como_pagada
wadus wadus
end

Pueda definir callbacks tal que
así:
after_marcar_como_pagada :do_something
before_marcar_como_pagada :do_otherthing

Y que así mismo pueda poner triggers en un observer antes y después de
cualquier método.

f.


#4

2009/3/7 Fernando G. removed_email_address@domain.invalid:

Pueda definir callbacks tal que así:

after_marcar_como_pagada :do_something
before_marcar_como_pagada :do_otherthing

Y que así mismo pueda poner triggers en un observer antes y después de
cualquier método.

Fijate bien en el método save suyo. Quizá el ejemplo es un poquillo
malo, pero creo que se puede.

Lo que tienes que hacer es más o menos esto (con tus nombres):

class MiClase
include ActiveSupport::Callbacks

define_callbacks :after_marcar_como_pagada,
:before_marcar_como_pagada # o los nombres que tu quieras, realmente

before_marcar_como_pagada :do_something
after_marcar_como_pagada :do_something_else

def marcar_como_pagada
run_callbacks(:before_marcar_como_pagada)
# tú código real de marcar_como_pagada
run_callbacks(:after_marcar_como_pagada)
end

private
def do_something
end

def do_something_else
end
end

Si bien es cierto que no te dan la funcionalidad de invocar a los
callbacks automáticamente, no está del todo mal. Y juraría que te
funcionará desde un observador.

Suerte.


#5

los callbacks oficiales:

Y no antes o después de cualquier método mio, como ‘Carrito.marcar_como_pagado’

mírate http://www.ruby-doc.org/core/files/lib/observer_rb.html

es parte del api estándar de ruby y es como están implementados los
observers de rails

suerte,

j


javier ramírez

…i do ruby on rails development in madrid, spain, at
http://www.aspgems.com
…you can find out more about me on http://formatinternet.wordpress.com
and http://workingwithrails.com/person/5987-javier-ramirez