No solía haber una solución limpia para esto. Suponiendo que no tiene control sobre before_filters
(o no quiere cambiarlos), dejaría el skip_before_filter
y agregaría un before_filter
adicional que solo ejecuta los métodos deseados si es un método xhr
.
así que algo como
skip_before_filter :load_something, # how to skip these only
:load_something_else # if the request is xhr ?
before_filter :do_loads_if_xhr
def do_loads_if_xhr
if request.xhr?
load_something
load_something_else
end
end
El método descrito here sólo funciona debido a que el condicional es global para la aplicación: el condicional sólo se evalúa cuando se crea la clase. No en cada solicitud.
[ACTUALIZADO] Sin embargo, hay una manera más clara de hacer que el skip_before_filter
sea condicional. Escribe así:
skip_before_filter :load_something, :load_something_else, :if => proc {|c| request.xhr?}
También tenga en cuenta que, si bien skip_before_filter
sigue siendo totalmente compatible, y no obsoleta, ya que los carriles 4 La documentación parece preferir la (idéntico) skip_before_action
. Además, la documentación no es totalmente clara al respecto, tuvo que verificar en el código.
¿No deberían ser los métodos && d juntos para que si uno anterior devuelve falso, entonces los otros no se ejecutarán y la cadena de filtros se detendrá? –