在我的Rails应用程序中,我正在安装一个外部引擎。我的before_filter
中有一个ApplicationController
,我需要从此过滤器中排除某些引擎的操作。
通常,我会在相应的控制器中使用skip_before_filter
,但我宁愿不触及引擎代码本身,因为它不是我的。
有办法做到这一点吗?
class ApplicationController < ActionController::Base
before_filter :authorize, :except => [:engine/setup] # something like this?
...
谢谢,
PJ
答案 0 :(得分:3)
只是要添加到orien的答案,您需要在引擎中指定特定的控制器,或者仅指定ApplicationController
:
EngineController::ApplicationController.class_eval do
skip_before_filter :authorize, :only => [:setup]
end
此外,如果您希望在开发模式下的每个请求上重新加载过滤器跳过:
Rails.application.config.to_prepare do
EngineController::ApplicationController.class_eval do
skip_before_filter :authorize, :only => [:setup]
end
end
答案 1 :(得分:2)
只需从您自己的新控制器继承您想要的引擎控制器,然后覆盖您要跳过前过滤器的操作,并在其中调用 super 。在该控制器中,使用您的操作名称(也是父引擎控制器操作的名称)调用skip_before_filter。
class MyController < EngineController
skip_before_filter :authorize, :only => [:setup]
def setup
super
end
end
不完全确定,但我认为这样可以解决问题。
答案 2 :(得分:1)
尝试将以下内容添加到初始值设定项中 - 例如config/initializers/engine.rb
EngineController.class_eval do
skip_before_filter :authorize, :only => [:setup]
end