在Rails 4中,我对before_action :require_login
使用UserController
。如果用户未登录,则应该重定向。但是似乎没有使用过滤器。为什么呢?
require_login
在app/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 :(得分:3)
您正在关注Michael Hartl的教程吗?设计用于视图逻辑的/ app / helper中的助手,而不是用于控制器代码。
但是,要将助手包含在控制器中,您可以使用include SessionsHelper
。
参考:http://ruby.railstutorial.org/chapters/sign-in-sign-out#code-sessions_helper_include
答案 1 :(得分: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