порядок before_filters в контроллере Rails и проблемы

У меня есть вопрос 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

Если я включаю MyConcern внутри MyController, будет ли порядок, в котором вызываются перед фильтрами, зависит от того, как этот код устроен? Например, если у нас есть

class MyController < ApplicationController
  include MyConcern

  before_filter :filter_inside_controller
end

filter_inside_concern ли filter_inside_concern перед filter_inside_controller (или наоборот)?

Спасибо!

0
05 янв. '16 в 13:19
источник поделиться
2 ответов

Я воссоздал вашу ситуацию и выяснил, что последовательность выполнения зависит от последовательности, в которой вы пишете оба фильтра.

если вы пишете

  include MyConcern
  before_filter :filter_inside_controller

фильтр-запрос будет выполняться первым

или если вы пишете фильтры в этой последовательности

  before_filter :filter_inside_controller
  include MyConcern

фильтр контроллера будет выполняться первым

1
05 янв. '16 в 13:35
источник

Если вы используете:

class MyController < ApplicationController
  include MyConcern

  before_filter :filter_inside_controller
end

filter_inside_concern будет вызван до filter_inside_controller

Если вы хотите, чтобы filter_inside_controller вызывался до filter_inside_concern, вместо этого вы должны использовать prepend_before_filter:

class MyController < ApplicationController
  include MyConcern

  prepend_before_filter :filter_inside_controller
end

В качестве примечания стороны before_filter и prepend_before_filter будут устаревать. prepend_before_action этого вы должны использовать before_action и prepend_before_action.

0
30 янв. '16 в 22:00
источник

Посмотрите другие вопросы по меткам или Задайте вопрос