2016-06-10 13 views
0

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?

Antwort

0

Stellen Sie sicher, dass alle Ihre Aufgaben einen Client haben. Wenn Sie dies in Ihrem Modell müssen erzwingen, eine Validierung zur Verfügung stellen in Ihrem Task Modell

class Task < ActiveRecord::Base 
    belongs_to :client 
    validates :client, presence: true 
end 
+0

Sie tun. Ich habe die Validierung trotzdem hinzugefügt: gleicher Fehler. – mrtnmgs

+1

@ 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 –

+1

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