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
, was den Wert der Sendung ist .logs.letzte? – sakurashinken
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
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