Подтвердить что ты не робот

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

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

before_filter [:fn1, :fn2]

или

before_filter :fn1
before_filter :fn2

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

4b9b3361

Ответ 1

Если вы ссылаетесь на 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.

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

Ответ 3

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

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

before_filter :fn1, :fn2

def fn1
  puts 'foo'
end

def fn2
  puts 'bar'
end

Выполняет fn1, затем fn2.

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

Ответ 4

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

:ensure_items_in_cart, :ensure_items_in_stock, :verify_open_shop

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

:ensure_items_in_stock, :ensure_items_in_cart, :verify_open_shop