2011-01-09 6 views
0

Ich habe ein Berichtsmodell, das zu einem Standortmodell gehört. Wenn ich auf ein Berichtsobjekt innerhalb eines verschachtelten Partials zugreife, erhalte ich einen nil-Wert für report.location, wenn ich den gewünschten Wert sowohl in der parentalen Teilansicht als auch in der ursprünglichen Ansicht, die die Partials enthält, erhalte.Verlieren von Verknüpfungen in verschachtelten Teiltabellen in Rails

Zum Beispiel

in der Ansicht für die Berichte/Index Aktion, habe ich auf die verwandten Positionen für einzelne Elemente in einem Array @reports beziehen kann und erhalten den gewünschten Wert:

@reports[0].location.name # Works 

aus dieser Ansicht mache ich einen Teil:

render :partial => "reports/reports_table", :locals => { :reports => @reports } 

im reports_table Teil, kann ich an die Stelle eines einzelnen Elements des Arrays von Berichten beziehen sie noch und Holen Sie sich einen könnte schätzen:

reports[0].location.name # Works 

Aus dieser Ansicht machen ich eine teilweise für jedes einzelne Element des lokalen Berichte Array:

reports.each do |report| 
    render :partial => "reports/report_display_row", :locals => { :report => report } 
end 

aber innerhalb dieser zweiten Ebene Teil (report_display_row) bekomme ich ein Nullwert für die zugehörige Position für jeden einzelnen Bericht:

report.location.name # undefined method `name' for nil:NilClass 

I Variationen haben versucht, und zwar unabhängig von dem, was ich versucht habe, scheint es in dieser verschachtelten Teilobjekten zugeordnet wi th meine Instanz von Bericht sind immer Null.

+0

Was bekommen Sie von report.class innerhalb der zweiten verschachtelten Teil? – mark

+0

hier ist nichts falsch ... das einzig mögliche, was ich sehen kann, ist, dass rails verwirrt wird über die lokale Variable und Enumerator-Variable mit dem gleichen Namen. probiere report.each do | r |:: report => r und schau, ob du das gleiche Ergebnis bekommst – sethvargo

Antwort

1

Sie zählen darauf, dass der Bericht immer einen Standort hat. Jetzt tut mindestens einer von ihnen nicht. Verwenden Sie report.location.try(:name), um den Fehler zu umgehen.

Wenn Sie Standort obligatorisch Fügen Sie diese Validierung zu Ihrem Bericht Modell machen wollen:

validates :location, :presence => true 
Verwandte Themen