在我的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
logged_in?
并验证是否有效。但是,当我改变
<% if logged_in? %>
到
<% if logged_in? && current_user.free? %>
在views / top / index.html.erb中,发生以下错误。
NameError at /
undefined local variable or method `current_user' for #<#<Class:...>:...>
我该如何解决这个问题?
free?
在user.rb中定义为
def free?
visit.game.count == 0
end
加
如果我将current_user
更改为@current_user
,则错误消息如下所示。
NoMethodError at /
undefined method `free?' for nil:NilClass
答案 0 :(得分:5)
只需尝试将其添加到您的应用程序控制器:
helper_method :current_user
这样做是因为它将私有方法作为辅助方法,并且可以在所有控制器和视图中访问它。希望这会有所帮助。
答案 1 :(得分:0)
在使用 Pundit gem和 JWT gem进行身份验证的 Rails 6 仅API应用程序上工作时,我遇到了这个问题。
在尝试测试控制器操作的 Pundit 授权时,我遇到了此错误:
NameError:#Api :: V1 :: SchoolsController:0x00007f30a4918120 \ n的未定义局部变量或方法“ current_user” \ n您是什么意思? @current_user
这是我的固定方式:
权威似乎无法使用current_user
方法,因此它在找不到该错误时抛出了该错误。
我只是在pundit_user
文件中定义了一个app/controllers/application_controller.rb
:
class ApplicationController < ActionController::API
include Pundit
def pundit_user
header = request.headers['Authorization']
header = header.split(' ').last if header
@decoded = JsonWebToken.decode(header)
User.find(@decoded[:user_id])
rescue ActiveRecord::RecordNotFound => e
render json: { errors: e.message }, status: :unauthorized
rescue JWT::DecodeError => e
render json: { errors: e.message }, status: :unauthorized
end
end
仅此而已。
我希望这会有所帮助