获得"未定义的方法"尝试在控制器中创建过滤器时

时间:2017-01-24 19:29:28

标签: ruby-on-rails authentication filter ruby-on-rails-5 before-filter

我正在使用Rails 5.在我的应用程序控制器中,我有:

private

def current_user
 @current_user ||= User.find_by(id: session[:user_id])
end

然后,在另一个控制器中我:

class MyObjectsController < ApplicationController

before_filter !current_user { redirect_to root_path }, except: [:search]

但我收到了错误:

undefined method `current_user' for MyObjectsController:Class

我做错了什么?除了search方法之外,如何将过滤器应用于控制器中的每个方法?

1 个答案:

答案 0 :(得分:0)

您正在使用它的方式,在加载类时调用current_user method,它在该级别上无法使用。它仅在请求期间可用。这就是你的意思。

before_filter :require_current_user, except: [:search]

def require_current_user
  redirect_to(:root, :notice => "you must be logged in") unless current_user
end

如果你正在使用设计,你应该能够

before_action :authenticate_user!, :except => [:search]