2013-02-07 26 views

回答

22

要確保過濾器適用於所有操作,請將其放入application_controller.rb中。

+1

如果喲想要什麼添加一個除了那個過濾器?你將如何運行所有控制器中的所有操作的過濾器,除了讓我們說用戶控制器的索引操作? @David Hahn – Cas

+3

你可以在用戶控制器中添加:'skip_before_filter:verify_logged_in,:except => [:index]'。 –

0

將它放在ApplicationController中,並從中繼承所有其他控制器。如果您不在其中一個子控制器中覆蓋verify_logged_in,它就可以工作。

10

應用程序控制器是所有其他類的基類。

如果你把任何過濾器在這個類中,則流程如下:

如果碰到任何行動users資源的URL說,說index行動,那麼:

控制首先進入Application Controller。在那裏它檢查過濾器,如果發現任何它然後執行過濾器方法,然後它進入用戶控制器的索引操作。

應用控制器:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    before_filter :verify_logged_in 

end 

其他控制器:

class UsersController < ApplicationController 

    def index 

    end 

在這裏,在上面的代碼中,你看到其他控制器被繼承父控制器的內容是應用控制器。因此,如果您將before_filter放在應用程序控制器中,那麼對於每個用戶,都會驗證用戶是否爲每個請求登錄。在基類

+0

當我使用像omniauth這樣的不使用我的應用程序控制器進行操作的庫時,我該做什麼? – panzi

4

放的before_filter(在application_controller.rb文件),它會工作的基礎,它的所有派生類,如

class ApplicationController < ActionController::Base 
    before_filter :set_locale 

    def set_locale 
    I18n.locale = params[:locale] or I18n.default_locale 
    end 
end 

好運:-)

相關問題