Обеспечивает ли рельсы какие-либо гарантии относительно порядка выполнения фильтров до одного из следующих способов:
before_filter [:fn1, :fn2]
или
before_filter :fn1 before_filter :fn2
Буду признателен за любую помощь.
Если вы ссылаетесь 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.
CheckoutController
:ensure_items_in_cart
:ensure_items_in_stock
:verify_open_shop.
Таким образом, вы можете явно указать порядок цепочки фильтров следующим образом.
Before_filter Order in 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.
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