如何指定执行before_filters的顺序?

Jam*_*mes 66 ruby-on-rails before-filter

rails是否对使用以下任一用法执行过滤器之前的顺序做出任何保证:

before_filter [:fn1, :fn2]
Run Code Online (Sandbox Code Playgroud)

要么

before_filter :fn1
before_filter :fn2
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助.

小智 81

如果您参考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
Run Code Online (Sandbox Code Playgroud)

根据解释:

该过滤器链的CheckoutController现在 :ensure_items_in_cart,:ensure_items_in_stock, :verify_open_shop.

因此,您可以明确地给出过滤器链的顺序.


Sec*_*tor 25

在Rails中的Before_filter订单 http://b2.broom9.com/?p=806

过滤链排序 http://rails.rubyonrails.org/classes/ActionController/Filters/ClassMethods.html

如果您需要保证订单,您可以这样做:

before_filter :fn3

def fn3
  fn1
  fn2
end
Run Code Online (Sandbox Code Playgroud)

  • 如果两者都失败并且尝试重定向,这不会导致问题吗? (3认同)