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

时间:2017-07-25 15:47:07

标签: ruby-on-rails pundit

我在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

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

p @current_user
authorize @current_user

1 个答案:

答案 0 :(得分:2)

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

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