Ich habe Client- und Aufgabenmodelle, und ich definierte die Beziehungen (Task belongs_to :client
und Client has_many :tasks
). In meinen Aufgabenansichten kann ich Daten aus der Clienttabelle abrufen (z. B. @task.client.name
funktioniert einwandfrei.) Aber wenn ich über alle Ergebnisse iteriere (@tasks.each do |task|
), kann ich nicht mehr auf die Clienttabelle zugreifen: task.client.name
löst einen Fehler aus:Schienen, die verbundene Tabelle in jeder Schleife anzeigen
undefined method `name' for nil:NilClass
So offensichtlich die client
Methode funktioniert nicht auf task
. Was mache ich falsch?
Sie tun. Ich habe die Validierung trotzdem hinzugefügt: gleicher Fehler. – mrtnmgs
@ user3741713, könnten Sie bereits Datensätze erstellt haben, die bereits erstellt wurden, bevor Sie die Validierung hinzugefügt haben, was bedeutet, dass die .each-Schleife funktioniert, aber plötzlich mindestens einer der zugehörigen Clientdatensätze fehlte, wodurch der Fehler ausgelöst wurde. Können Sie überprüfen, ob alle Aufgabeneinträge einen Client mit dem folgenden Code enthalten? 'setzt Task.all.collect {task.client.blank? ? task.id: nil} .compact' Dies gibt alle Aufgaben mit fehlenden Kundendaten zurück –
Ich denke, Sie haben eine verwaiste Aufgabe, dh ohne Client in Ihren Aufgaben. Sie können Fehler vermeiden, indem Sie try task.try (: client) .try (: name) verwenden. Aber es ist nur ein Workaround. IMO, Sie müssen Ihren Datensatz verifizieren. – oliviergg