在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
鉴于此代码位于我的一些控制器中,并且传入的方法(以及它是否使用only
或except
)与一个控制器不同接下来,我希望有一个我可以调用的before_action
或before_filter
,它可以有效地运行上面的代码。在继承的控制器中,调用最好看起来像:
replace_filter(param1, {only: [:method1, :method2]})
第二个参数(详细说明应用它的方法的哈希)应该能够接受空值并应用于所有方法。我已经创建了一个辅助函数(与这些其他过滤器一起编写),在语法和逻辑上应该这样做,但似乎无法使用before_action
或before_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