如何构建控制器筛选器覆盖帮助程序

时间:2015-07-14 23:59:22

标签: ruby-on-rails ruby

在Rails中,您可以将before_filter添加到控制器中。假设基本控制器具有以下内容:

before_filter :my_base_filter

鉴于此,假设您有一整套从这个基本控制器继承的控制器,并且规范是这种行为是正确的。我现在有一小部分控制器执行以下操作:

skip_before_filter :my_base_filter, only: [:method1, :method2]
before_action only: [:method1, :method2] do
  my_secondary_filter(param1)
end

鉴于此代码位于我的一些控制器中,并且传入的方法(以及它是否使用onlyexcept)与一个控制器不同接下来,我希望有一个我可以调用的before_actionbefore_filter,它可以有效地运行上面的代码。在继承的控制器中,调用最好看起来像:

replace_filter(param1, {only: [:method1, :method2]})

第二个参数(详细说明应用它的方法的哈希)应该能够接受空值并应用于所有方法。我已经创建了一个辅助函数(与这些其他过滤器一起编写),在语法和逻辑上应该这样做,但似乎无法使用before_actionbefore_filter而不是{{1}正确地调用它首先执行。是否可以做类似的事情,如果是这样,最好的方法是什么?

application_controller.rb

my_base_filter

inherited_controller.rb

class ApplicationController < ActionController::Base
  include ApplicationHelper

  before_action :my_base_filter
  ...
end

application_helper.rb

class InheritedController < ApplicationController

  # I want to replace these lines with my new helper function
  skip_before_filter :my_base_filter, only: [:method1, :method2]
  before_action only: [:method1, :method2] do
    my_secondary_filter(param1)
  end
  ...
end

0 个答案:

没有答案