控制器before_filter无效

时间:2013-12-09 01:44:02

标签: ruby-on-rails ruby-on-rails-4

在Rails 4中,我对before_action :require_login使用UserController。如果用户未登录,则应该重定向。但是似乎没有使用过滤器。为什么呢?

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

2 个答案:

答案 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