web-dev-qa-db-ja.com

before_filtersが実行される順序を指定するにはどうすればよいですか?

Does Rails以下のいずれかの使用法でフィルターが実行される前の順序について保証します。

before_filter [:fn1, :fn2]

または

before_filter :fn1
before_filter :fn2

助けていただければ幸いです。

65
James

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.

そのため、そのようなフィルターチェーンの順序を明示的に指定できます。

81
Johnny Woo

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
24
Sector

私が知る限り、実行したい最初の関数などを配置します。

だから、次のようなもの:

before_filter :fn1, :fn2

def fn1
  puts 'foo'
end

def fn2
  puts 'bar'
end

fn1、次にfn2を実行します。

お役に立てば幸いです。

2

CheckoutControllerのフィルターチェーンはこの順序に従いません

:ensure_items_in_cart, :ensure_items_in_stock, :verify_open_shop

代わりに、

:ensure_items_in_stock, :ensure_items_in_cart, :verify_open_shop
1
HEraju