2009-07-13 7 views

Respuesta

2

No conozco una forma elegante de lograr esto. Sin embargo, usando un poco de pensamiento lateral ... puedes asegurarte de que todos tus controladores usen prepend_before_filter. De esta forma, si su módulo usa before_filter sabrá que siempre será el último filtro porque los controladores siempre agregarán sus filtros al comienzo de la cadena de filtros.

1

Según la API de rieles, el valor predeterminado "before_filter" es un alias para "append_before_filter", que agrega filtros al final de la lista filter_chain. Diría que hay una suposición razonable de que si ordena sus filtros correctamente en el controlador, se ejecutarán para que aparezcan en la lista. Como la respuesta anterior sugiere, también hay un "prepend_foreforefilter" que asegura que el filtro que está agregando se encuentra al frente de la filter_chain.

2

Puede anular before_filter en su módulo, o hacer que el enganche de devolución de llamada self.included declare alias_method_chain :before_filter, :final_filter. Esto no se recomienda para el código que le gustaría tener en puerto en múltiples versiones de Rails, o cuando liberará código para usarlo en otros contextos.

3

Aquí hay un módulo simple que permite la ejecución de código arbitrario después del conjunto completo de before_filters. Con un poco de trabajo, probablemente podría limpiar esto para que se haya ejecutado aquí una cola de after_before_filters especial (con un comportamiento adecuado de detención, etc.).

module OneLastFilterModule 

    def self.included(base) 
    base.class_eval do 

     def perform_action_without_filters_with_one_last_filter 

     # 
     # do "final" before_filter work here 
     # 

     perform_action_without_filters_without_one_last_filter 
     end 
     alias_method_chain :perform_action_without_filters, :one_last_filter 

    end 
    end 

end 

Tenga en cuenta que usted debe tener cuidado de hacer esto, ya que los controladores en sí mismos pueden hacer suposiciones sobre el pedido de filtro basado en el orden de declaración.

Cuestiones relacionadas