1

在我的 Rails 应用程序中,我正在安装一个外部引擎。我的 中有一个before_filterApplicationController我需要从这个过滤器中排除一些引擎的操作。

通常,我会skip_before_filter在相应的控制器中使用,但我宁愿不接触引擎代码本身,因为它不是我的。

有没有办法做到这一点?

class ApplicationController < ActionController::Base

  before_filter :authorize, :except => [:engine/setup] # something like this?
  ...

谢谢,

PJ

4

3 回答 3

5

只是为了添加到 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
于 2014-06-13T01:42:10.037 回答
3

尝试将以下内容添加到初始化程序 - 例如config/initializers/engine.rb

EngineController.class_eval do
  skip_before_filter :authorize, :only => [:setup]
end
于 2013-12-31T23:45:44.827 回答
2

只需从您自己的新控制器继承您想要的引擎控制器,然后覆盖您要跳过之前过滤器的操作并在其中调用super。在该控制器中,使用您的操作名称(也是父引擎控制器操作的名称)调用 skip_before_filter。

class MyController < EngineController
    skip_before_filter :authorize, :only => [:setup]

    def setup
        super
    end
end

不完全确定,但我认为这会奏效。

于 2013-05-01T17:06:33.100 回答