Как я могу указать порядок, который перед выполнением фильтров?


делает ли rails какие-либо гарантии относительно порядка, который перед фильтрами выполняется с любым из следующих применений:

before_filter [:fn1, :fn2]

или

before_filter :fn1
before_filter :fn2

Я был бы признателен за любую помощь.

4 59

4 ответа:

если вы ссылаетесь http://api.rubyonrails.org/v2.3.8/classes/ActionController/Filters/ClassMethods.html, есть подзаголовок под названием "Порядок цепочек фильтров", вот пример кода из этого:

class ShoppingController < ActionController::Base
    before_filter :verify_open_shop

class CheckoutController < ShoppingController
    prepend_before_filter :ensure_items_in_cart, :ensure_items_in_stock

согласно объяснения:

цепочка фильтров для CheckoutController теперь :ensure_items_in_cart,:ensure_items_in_stock, :verify_open_shop.

таким образом, вы можете явно указать порядок цепочки фильтров.

порядок Before_filter в Rails http://b2.broom9.com/?p=806

упорядочение цепочек фильтров http://rails.rubyonrails.org/classes/ActionController/Filters/ClassMethods.html

Если вам нужен гарантийный заказ, вы можете сделать это:

before_filter :fn3

def fn3
  fn1
  fn2
end

насколько я могу судить, Вы ставите первую функцию, которую хотите выполнить и так далее.

Так, что-то вроде:

before_filter :fn1, :fn2

def fn1
  puts 'foo'
end

def fn2
  puts 'bar'
end

выполнить fn1, потом fn2.

надеюсь, что это поможет.

цепочка фильтров для CheckoutController не следует этому порядку

:ensure_items_in_cart, :ensure_items_in_stock, :verify_open_shop

вместо этого, он должен быть

:ensure_items_in_stock, :ensure_items_in_cart, :verify_open_shop