2017-07-25 4 views
0

Je reçois l'erreur suivante dans Rails:Rails5 - variable locale non définie mais il est global

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

Le fragment de code correspondant à cette erreur est:

authorize @current_user 

Comme vous pouvez le voir, je clairement signifie @current_user comme le message d'erreur suggère, et j'utilise également @current_user comme le message d'erreur suggère. Pourquoi Rails pense-t-il que je veux dire une variable inexistante locale quand je m'attends à ce qu'elle soit globale? La méthode authorize provient de Pundit.

J'ai ajouté une déclaration d'impression afin de vérifier si la variable globale existe, et le code suivant imprime efficacement un utilisateur valide:

p @current_user 
authorize @current_user 

Répondre

2

Pour utiliser Pundit, vous devez définir current_user (ou pundit_user): https://github.com/elabs/pundit/blob/master/lib/pundit.rb#L270

Lorsque vous faites authorize @current_user, cela garantit que le current_user peut effectuer des actions sur @current_user en utilisant le UserPolicy.

+0

C'était la cause du problème, merci! Acceptera en 6 minutes – thepieterdc