2010-06-16 9 views
7

Ich habe ein Projekt mit vielen Aufgaben, und jede Aufgabe gehört zu einer Person.Wie Sie einen Bereich bei Verwendung von fields_for?

In meinem Projekt bearbeitet Form, erlaube ich bestehende Aufgaben zu bearbeiten und neue mit der verschachtelten Objekt Formular Anlage (http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes) hinzufügen:

<% project_form.fields_for :tasks do |task_form| %> 

ich die zugehörigen Task-Person-Objekte, wenn fields_for Anfragen zu eifrig Last will die Aufgaben aus der Datenbank, aber ich konnte keine Lösung finden. Ist es möglich? Im Project-Modell könnte ich meine has_many: tasks mit der Option include definieren, aber ich würde das lieber vermeiden, da ich Person-Objekte beim allgemeinen Umgang mit Projektaufgaben nicht unbedingt eifrig laden muss.

Für jetzt habe ich eine zweite has_many Assoziation erstellt: tasks_inclusive_person mit den entsprechenden access_nested_attributes_for und benutze es in meinem fields_for. Es funktioniert, aber ich würde es vorziehen, keine spezifische Assoziation wie diese zu erstellen.

Antwort

23

Sie können einen zweiten Parameter an fields_for übergeben, bei dem es sich um das Objekt oder die Sammlung handelt, die gerendert werden soll. Zum Beispiel:

project_form.fields_for :tasks, project_form.object.tasks.all(:include => :person) do |task_form| 
+0

Danke Jason! und Entschuldigung für die lange Verzögerung meiner Antwort. Das, was ich brauchte. "tasks (: include =>: person)" lädt nicht unbedingt, ich musste es nur in "tasks.find (: all,: include =>: person)" ändern. – Florent2

+0

Ups, das war ein Versehen meinerseits. Ich habe mein Beispiel aktualisiert, um 'object.tasks.all (: include =>: person)' aufzurufen. –

Verwandte Themen