我想允许匿名访问我的论坛。我正在使用Forem Gem和Devise Gem。我的ApplicationController中有一个before_filter,可以确保用户登录。
before_filter :authenticate_user!
在我自己的控制器中,我使用skip_filter来允许匿名访问操作,但我不知道如何为Forem Gem中的控制器执行此操作。
我可以将我的ApplicationController中的before_filter语句移动到我自己的每个控制器中,但我宁愿不这样做。
答案 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。