2017-08-30 4 views
0

Dieser Code gibt mir die folgende Fehlermeldung:Warum gibt diese Funktion einen nicht definierten Methodenfehler, wird aber mit byebug ausgeführt?

undefined method `user_id' for nil:NilClass

def show_username(shipment) 
    userid = shipment.logs.last.user_id 
    User.find(userid).name 
    end 

Allerdings, wenn ich einfügen ein byebug ich den Code ausführen kann und Zugriff auf alle Variablen und Methoden ohne Fehler.

Mit byebug ich folgende Antworten:

(byebug) shipment.logs.last 
Log Load (0.3ms) SELECT "logs".* FROM "logs" WHERE "logs"."shipment_id" = $1 ORDER BY "logs"."id" DESC LIMIT $2 [["shipment_id", 95], ["LIMIT", 1]] 
    #<Log id: 87, activity: "Shipment updated", created_at: "2017-08-28 15:19:07", updated_at: "2017-08-28 15:19:07", shipment_id: 95, user_id: 3> 

(byebug) shipment.logs.last.user_id 
    Log Load (2.6ms) SELECT "logs".* FROM "logs" WHERE "logs"."shipment_id" = $1 ORDER BY "logs"."id" DESC LIMIT $2 [["shipment_id", 95], ["LIMIT", 1]] 
3 
+0

, was den Wert der Sendung ist .logs.letzte? – sakurashinken

+0

Wir gehen davon aus, dass wir wegen des Tags in Rails sind. Haben Sie eine Zuordnung zwischen Versand und Benutzer? Hast du auch in die "rails console" gesprungen und validiert 'shipment.logs.last.user_id' kehrt wie erwartet zurück? Wenn Sie Verknüpfungen richtig erstellt hätten, würde ich annehmen, dass Sie stattdessen etwas tun könnten, wie 'supply.logs.last.user.name'. – ddubs

+0

Ich habe die Frage aktualisiert. Die Assoziationen funktionieren, wenn ich Byebug benutze. Ich verstehe nicht, warum es einen Fehler gibt, wenn der Code natürlich läuft. – BBORNCR

Antwort

1

Die shipment.logs.last muss nil sein! Vielleicht rufen Sie die Methode viele Male und Ihre byebug in einem Kontext zu stoppen, dass shipment.logs.last nicht nil ...

zu debuggen Versuchen Sie, eine Bedingung geben byebug zu nennen:

def show_username(shipment) 
    byebug unless shipment.logs.last 
    userid = shipment.logs.last.user_id 
    User.find(userid).name 
end 
+0

Das war das Problem! Als ich den Byebug Rahmen um Rahmen durchschritt, gab es schließlich Sendungen, die keine Stämme hatten. Ich werde bestätigen, dass Protokolle existieren. – BBORNCR

Verwandte Themen