2010-08-02 6 views
20

En el siguiente ejemplo,Ruby on Rails, before_filter y prepend_before_filter order is is?

before_filter :foo 
before_filter :bar 
before_filter :wah 
prepend_before_filter :heehee 
prepend_before_filter :haha 

así, entonces las órdenes de ejecución será:

haha, heehee, foo, bar, wah? <-- note that haha is actually before heehee 

Y es que hay una razón para no enumerar haha y heehee por primera vez en el primer lugar, pero en realidad utilizar prepend?

Respuesta

26

Que yo sepa, esta es resolver la herencia de clases donde no se puede definir el orden de la before_filter:

ApplicationController < ActionController::Base  
    before_filter :do_this_first  
    #.... 
end 

SomeController < ApplicationController  
    before_filter :do_this_second 
    #.... 
end 

En este caso, ninguno de los métodos definidos tendrán preferencia a menos que utilice un prepend_before_filter.

0

Parece prepend_filter, en una cola de before_filter s, agrega un filtro al frente de la cola. Por lo tanto, último llegado, primero servido.