Hola a todos
Estoy trabajando en una aplicación que requiere de un Observer (o me
pareció la mejor manera)
que tiene que grabar en un registro una serie de acciones de varios
modelos.
Con lo que me he topado es que la visibilidad de una clase que herede de
Observer es bastante nula
no ve las variables de sesión ni instancias de objetos generados en el
controlador del modelo que a echo
saltar el Observer.
Heredando de AR no tendrÃa que llegar hasta esos puntos…
La otra opción que veo es un DRb con los callbacks de cada modelo pero
es muy feo…
Alguna idea?¿?
Saludos!!
2008/9/17 Pablo Formoso E. [email protected]:
Heredando de AR no tendrÃa que llegar hasta esos puntos…
La otra opción que veo es un DRb con los callbacks de cada modelo pero es
muy feo…
Por que DRb? Ten en cuenta que los Observers no son asincronos, se
ejecutan en el flujo de la accion.
Uno usa un Oberver en lugar de un callback por motivos conceptuales,
porque le parece que lo que hay que hacer no pertenece muy bien al
modelo, como mandar un mail, registrar algo, …
Por otro lado es correcto que un Observer no tenga visibilidad sobre
sesion etc., ya que pertenece a la capa modelo.
Cuando se necesita algo de la capa V yo generalmente ejecuto la cosa
en el controlador (salvo que se trate de algo que suceda en muchos
sitios, etc. depende). Por ejemplo, el mail de bienvenida lo lanzo
desde el controller
si se dio de alta
envia_mail(con esta URL que en V se conoce)
porque es correcto conceptualmente que un controlador haga mas de una
cosa siempre que no se vaya de madre. “En esta accion hay que hacer
esto Y esto”.
No lo sugiero para tu caso porque no lo conozco, solo lo digo para que
tengas presente que a veces en mi opinion es valido esto tambien.
Buenas,
tal como yo lo entiendo, el observer sirve para seguirle la pista a un
modelo, y como tal, éste nunca deberá poder acceder directamente a los
valores de la sesión o a instancias del controlador ya que en teorÃa
deberÃa ser lo más agnóstico posible sobre su entorno y trabajar
únicamente consigo mismo u otros modelos.
Si necesitas esos valores siempre se los podrás pasar por parámetro y
luego ya recuperarlos cuando se ejecute el observer.
Salud!
Xavier N. escribió:
2008/9/17 Pablo Formoso E. [email protected]:
class ActionsLogger < AR::Observer
observe :calls, customers, :info_requests
def after_create(model)
ActionTral.new("Create", model.to_xml)
end
end
Esa solucion esta perfecta salvo que necesites auditar quien realizo
la accion, porque eso no pertenece a la capa M.
Por ejemplo, acts_as_audited lo mueve a la capa C:
http://agilewebdevelopment.com/plugins/acts_as_audited
que es lo que la visibilidad de datos sugiere.
Ror-es mailing list
[email protected]
Ror-es mailing list
[email protected]