如何在Rails Forem Gem中的过滤器之前跳过

时间:2012-02-14 21:31:07

标签: ruby-on-rails-3.1

我想允许匿名访问我的论坛。我正在使用Forem Gem和Devise Gem。我的ApplicationController中有一个before_filter,可以确保用户登录。

before_filter :authenticate_user!

在我自己的控制器中,我使用skip_filter来允许匿名访问操作,但我不知道如何为Forem Gem中的控制器执行此操作。

我可以将我的ApplicationController中的before_filter语句移动到我自己的每个控制器中,但我宁愿不这样做。

2 个答案:

答案 0 :(得分:4)

感谢Ryan的回答,只是想指出文件应该是:

forem/application_controller_decorator.rb否则它不会加载初始化代码(注意:下划线 - 不是破折号)。

要重新迭代,初始化代码应为:

Rails.application.config.to_prepare do 
  Dir.glob(Rails.root.join("app/**/*_decorator*.rb")) do |c|
    Rails.configuration.cache_classes ? require(c) : load(c)
  end
end

因此它将在开发模式中的每个请求上重新加载。

希望这能节省几个小时!

答案 1 :(得分:0)

最好的位置是app/controllers forem/application_controller-decorator.rb目录中包含此内容的文件:

Forem::ApplicationController.class_eval do
  skip_before_filter :authenticate_member!
end

然后,您需要在名为config/initiailizers/load_decorators.rb的文件中使用此类行包含此文件:

Dir.glob(Rails.root.join("app/**/*_decorator*.rb")) do |c|
  Rails.configuration.cache_classes ? require(c) : load(c)
end

如果您愿意,这将允许您为任何其他类的Forem指定其他装饰器。

我从Spree那里偷了这个想法(我现在全职工作),我觉得它非常扎实。您可以看到它的原始实现here