2013-12-09 79 views
1

在Rails 4中,我使用before_action :require_login作爲我的UserController。如果用戶未登錄,這應該是重定向的。但是,該過濾器似乎並未被使用。爲什麼?控制器before_filter沒有任何作用

require_loginapp/helpers/sessions_helper.rb中定義。所以它不是我的控制器UsersController的幫手。如何知道UserController使用sessions_helper.rb的功能?看來我應該更具體:before_action "session/require_login"

在users_controller.rb控制器:

class UsersController < ApplicationController 
    before_action :signed_in_user 

    def index 
    end 
end 

的輔助函數在sessions_helper.rb:

def require_login 
    unless signed_in? 
     store_location 
     redirect_to signin_url, notice: "Please sign in." unless signed_in? 
    end 
    end 
+0

把一個提高或東西在裏面,看看它是否被調用。 – sevenseacat

回答

1

before_filter只能呼叫控制器的方法,不幫手。

您需要將助手require_login從助手移到UsesController或其父級說ApplicationController。

如果你仍然想使用require_login在視圖中的助手,你可以從控制器通過helper_method

class UsersController < ApplicationController 
    before_fitler :require_login 
    helper_method :require_login 

    def require_login 
    # code 
    end 
end 
+0

謝謝@比利 - 我在我的ApplicationControllers中添加了「包含SessionsHelper」,但它仍然沒有效果 –

+0

該方法中的邏輯是純控制器,爲什麼要將其定義爲幫助器而不是控制器方法?您始終可以將控制器方法暴露給幫助者,但反之亦然。 –

相關問題