2012-02-14 71 views
2

我想允許匿名訪問我的論壇。我正在使用Forem Gem和Devise Gem。我在我的ApplicationController一個before_filter,來確保用戶已登錄。如何跳過Rails之前的過濾器Forem Gem

before_filter :authenticate_user! 

在我自己的控制器我用skip_filter允許行動匿名訪問,但我不知道如何在培訓就業部寶石控制器做到這一點。

我可以將我的ApplicationController中的before_filter語句移動到我自己的控制器中,但我寧願不要。

回答

0

這樣做的最好的地方是在forem/application_controller-decorator.rbapp/controllers目錄內的文件,其中包含此內容:

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

+0

我試過這個,它第一次加載論壇索引。但是,如果我刷新索引或點擊其他論壇鏈接,它會將我重定向到登錄頁面。 – 2012-02-15 02:08:04

+0

我想通了。 load_decorators.rb中的代碼需要被Rails包裝.application.config.to_prepare do end – 2012-02-15 02:30:08

4

感謝您的回答瑞安,只是想指出的是,該文件應該是:

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 

,使其在發展模式的每個請求重新加載。

希望這可以節省幾個小時!

相關問題