2011-10-13 2 views
2

Je reçois l'erreur ci-dessus avec Rails 3.1.1 et Ruby 1.9.2. J'ai passé la dernière heure à la recherche et les principales choses que j'ai trouvé étaient:Devise: méthode non définie `user_signed_in? ' pour ApplicationController: Classe

  1. clear_helpers dans ApplicationController peut provoquer les aides de ne pas charger. Mon code n'utilise pas cela et je ne crois pas que les gemmes que j'ai installées soient non plus.

  2. Manquant devise_for dans routes.rb. J'ai devise_for :users

  3. Missing 'database_authenticatable' dans mon modèle Utilisateurs. J'ai dans mon users.rb:

    concevoir: database_authenticatable,: enregistrable, : récupérable,: rememberable,: traçable,: validable

  4. Mon comportement correspond exactement à ce qui est décrit dans this email thread sauf signed_in? :user ne fonctionne pas pour moi non plus. Cependant, Devise.mappings montre le mappage de l'utilisateur.

Des idées sur ce qui pourrait être faux? Même un hack pour current_user m'aiderait grandement car je dois avoir des fonctionnalités fonctionnant ASAP.

Répondre

1

Je suis marquais cela comme un wiki communautaire puisque la solution est triviale.

j'appelle débogueur (que j'utilisé pour vérifier current_user avec le code suivant

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    debugger 
    filter {|c| Authorization.current_user = c.current_user} 
end 

Rails rend la session et demande des objets à la disposition des instances de contrôleurs. Ce débogueur est appelé dans le contexte de self == ApplicationController lorsqu'elle devrait être self == #<MainController...>.

longue histoire courte, assurez-vous que vous n'êtes pas essayer de l'appeler dans un contrôleur définition mais dans le contrôleur instance .

1

Le numéro 3 me semble étrange. Est-ce que votre fichier de modèle s'appelle users.rb? Est-ce que votre déclaration de classe est Users < ActiveRecord::Base? Si oui, changez-les à ci-dessous.

users.rb => user.rb

User < ActiveRecord::Base

+0

C'est en fait user.rb et c'était une faute de frappe de ma part. Bon oeil, cependant. Cela fonctionnait réellement et j'appelais 'current_user' et' user_signed_in? 'Dans le mauvais contexte. –

+0

Que voulez-vous dire par mauvais contexte? – Ken

+0

Voir ma réponse ci-dessus. Je l'appelais dans la déclaration d'un contrôleur au lieu de dans une instance d'un contrôleur. –

Questions connexes