fearx
March 7, 2009, 6:30pm
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…
f.
fearx
March 7, 2009, 8:21pm
2
2009/3/7 Fernando G. [email protected] :
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.
fearx
March 7, 2009, 8:48pm
3
Hola Dani
El día 7 de marzo de 2009 20:20, Daniel R.
Troitiño[email protected]
escribió:> 2009/3/7 Fernando G. [email protected] :
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.
fearx
March 7, 2009, 10:55pm
4
2009/3/7 Fernando G. [email protected] :
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.
fearx
March 8, 2009, 1:48am
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