未定义的局部变量或方法'current_user'

use*_*216 0 ruby-on-rails

在我的ApplicationController中,有current_use.

 private

  def current_user
    return unless session[:user_id]
    @current_user ||= User.find(session[:user_id])
  end

  def logged_in?
    !!session[:user_id]
  end
Run Code Online (Sandbox Code Playgroud)

logged_in?并验证工作.但是,当我改变

<% if logged_in? %>
Run Code Online (Sandbox Code Playgroud)

至

<% if logged_in? && current_user.free? %>
Run Code Online (Sandbox Code Playgroud)

在views/top/index.html.erb中,发生以下错误.

NameError at /

undefined local variable or method `current_user' for #<#<Class:...>:...>
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

free? 在user.rb中定义为

def free?
  visit.game.count == 0
end
Run Code Online (Sandbox Code Playgroud)

添加

如果我current_user改为@current_user,错误信息变为如下.

NoMethodError at /
undefined method `free?' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

Dee*_*eep 5

只需尝试将其添加到您的应用程序控制器:

helper_method :current_user
Run Code Online (Sandbox Code Playgroud)

它的作用是将私有方法作为辅助方法,并且可以在所有控制器和视图中访问它.希望这可以帮助.