2016-08-09 1 views
0

Ich kann nicht Kopf oder Schwanz davon machen (aber ich bin wahrscheinlich ein Idiot). Ich habe eine Klasse ApplicationController, die die folgende Methode enthält:Nicht definierte Methode protokolliert_in? Ruby on Rails

def logged_in? 
    !current_user.nil? 
end 

if logged_in? 
    load_and_authorize_resource :unless => :devise_controller?, :except => :show 
end 

Das gibt mir eine Fehlermeldung:

undefined method `logged_in?' for ApplicationController:Class

Diese Methode klar definiert ist, wie kommt es als undefiniert zurück?

+0

Wenn Sie es auf der obersten Ebene nennen (was Sie tun, unmittelbar nachdem sie definieren) Sie es auf Klassenebene anrufen, nicht auf Instanzebene. Sie haben eine Instanzmethode definiert. Außerhalb einer Instanz ist es nicht verfügbar. –

+0

Also, Sie haben die ApplicationController-Klasse, und darin haben Sie diese 6 Zeilen Code?, Richtig, wie Sie sie veröffentlicht?, Ich meine, die 'wenn geloggt_in?' Linie kommt nach dem 'Ende' der 'def logged_in?' Methode?. Wenn ja, machst du es falsch. Das 'wenn geloggt_in?' Code muss innerhalb Ihrer Methoden verwendet werden, nicht außerhalb. Sie verwenden Code außerhalb von Methoden, um vielleicht eine Art von Metaprogrammierung durchzuführen, um andere Methoden usw. zu definieren. – fanta

+0

@ 123 Haben Sie dieses Problem noch? Ich hatte ein ähnliches Problem, das ich heute gelöst habe –

Antwort

0

Vielleicht ist der beste Ort, um es zu deklarieren, in /helpers/application_helper.rb anstelle von Application_controller.

Um zu überprüfen, ob ein Benutzer angemeldet ist, stellt Devise den folgenden Helper zur Verfügung: user_signed_in?.

Quelle: https://github.com/plataformatec/devise

Verwandte Themen