Ruby on Rails: before_filter y caches_action el orden sí importa.
Estuve un día volviéndome loco con uno de estos tantos poltergeist que todo lenguaje o framework oculta, en este caso RoR.
Aprovecho para señalar mi opinión de que es imposible conocer un lenguaje/framework en unos pocos meses, por muy listo que seas y por muchos libros que seas capaz de leer en ese periodo. El verdadero conocimiento se esconde después de enfrentarte a un gran número de problemas/errores/bugs/y poltergeist que el lenguaje/framework en cuestión esconde, conocerle como si se tratara de conocer el carácter de una persona con la que convives hasta que entiendes como tratarle y entenderle. Es a lo que aveces nos referimos como la intuición.
Siguiendo con el poltergeist que nos ocupa: se trataba de que al activar la caché de acción en determinados controllers no se me estaban ejecutando los before_filters (aunque curiosamente si se ejecutaban los before_filters del padre ApplicationController no de mis propios Controllers).
Esto no era muy normal y estaba claro de que algo estaba haciendo mal, pues precisamente una de las peculiaridades de la caché de acción es que siempre ejecuta los filtros, a diferencia de la caché de página que no ejectua nada.
Bueno, después de seguir el sabio consejo: si te estás espesando déjalo para otro día, hoy ya he encontrado lo que ocurría y no es ni más ni menos que el orden en el que se declaran los before_filter y los caches_action.
Yo lo tenía así:
class MiController < ApplicationController caches_action :show before_filter :ejecutar_antes, :only => [ :show ] end
Y se solucionó cambiándolo a:
class MiController < ApplicationController before_filter :ejecutar_antes, :only => [ :show ] caches_action :show end
Es muy fácil de probar:
class MiController < ApplicationController before_filter :X1 caches_action :show before_filter :X2 private def X1 p "XXXXXXXXXXXX1" end def X2 p "XXXXXXXXXXXX2" end end
Si ejecutas :show una vez que ya está cacheada verás como sólo se ejecuta el primer filtro ‘X1′ y no el ‘X2′.
Si conoces algún sitio dónde se indique el órden en el que hay que hacer estas declaración pega el link en un comentario.
Noviembre 19th, 2014 at 11:38 pm
Hi there, I would like to subscribe for this
web site to take most recent updates, therefore where
can i do it please assist.