Rails5 - 未定义的局部变量但它是全局的

Rails5 - Undefined local variable but it's global

我在 Rails 中收到以下错误:

undefined local variable or method `current_user' for #<UserController:0x0000000458d708> Did you mean? @current_user

该错误对应的代码片段为:

authorize @current_user

如您所见,我明确表示错误消息提示的 @current_user,并且我也像错误消息提示的那样使用 @current_user。为什么 Rails 认为我指的是局部不存在的变量,而我期望它是全局变量? authorize 方法来自 Pundit.

我添加了一个打印语句来验证全局变量是否存在,下面的代码有效地打印出了一个有效的用户:

p @current_user
authorize @current_user

要使用 Pundit,您必须定义 current_user(或 pundit_user):https://github.com/elabs/pundit/blob/master/lib/pundit.rb#L270

当您执行 authorize @current_user 时,确保 current_user 可以使用 UserPolicy@current_user 执行操作。