2

次のように定義された Rails の問題があります。

module MyConcern
  extend ActiveSupport::Concern

  included do
    before_filter :filter_inside_concern
  end

  def filter_inside_concern
    # ...
  end
end

そしてbefore_filter、コントローラーレイヤーにもあります:

class MyController < ApplicationController
  before_filter :filter_inside_controller
end

MyConcerninsideを含める場合MyController、before フィルターが呼び出される順序は、コードの配置方法に依存しますか? たとえば、

class MyController < ApplicationController
  include MyConcern

  before_filter :filter_inside_controller
end

filter_inside_concernは前に呼び出されますかfilter_inside_controller(またはその逆)?

ありがとうございました!

4

2 に答える 2

3

私はあなたの状況を再現しました。実行の順序は、両方のフィルターを記述する順序に依存することがわかりました。

あなたが書くなら

  include MyConcern
  before_filter :filter_inside_controller

懸念フィルターが最初に実行されます

または、この順序でフィルターを記述する場合

  before_filter :filter_inside_controller
  include MyConcern

コントローラーフィルターが最初に実行されます

于 2016-01-05T10:35:38.103 に答える
1

使用する場合:

class MyController < ApplicationController
  include MyConcern

  before_filter :filter_inside_controller
end

filter_inside_concern前に呼び出されますfilter_inside_controller

filter_inside_controllerbeforeを呼び出したい場合は、代わりに次filter_inside_concernを使用する必要があります。prepend_before_filter

class MyController < ApplicationController
  include MyConcern

  prepend_before_filter :filter_inside_controller
end

補足として、before_filter廃止prepend_before_filter予定です。before_action代わりにandを使用する必要がありprepend_before_actionます。

于 2016-01-30T19:00:26.877 に答える