2010-06-16 3 views
7

J'ai un projet ayant plusieurs tâches, et chaque tâche appartient à une personne.Comment appliquer une portée à une association lors de l'utilisation de fields_for?

Dans mon formulaire de modification du projet, je permettent de modifier les tâches existantes et ajouter de nouvelles avec l'installation emboîtées d'objet (http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes):

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

Je veux charger avide les objets Tâche Personne associée demande lorsque fields_for les tâches de la base de données, mais je ne pouvais pas trouver de solution. C'est possible? Dans le modèle Project, je pouvais définir mes tâches has_many: avec l'option: include, mais je préfèrerais éviter cela car je n'ai pas besoin de charger des objets Person lorsque je fais face à des tâches de projet en général. Pour l'instant, j'ai créé une deuxième association has_many: tasks_including_person avec les accept_nested_attributes_for correspondants et l'utiliser dans mes champs_for. Cela fonctionne mais je préférerais ne pas avoir à créer une association spécifique comme celle-ci.

Répondre

23

Vous pouvez passer un deuxième paramètre à fields_for qui est l'objet ou la collection à rendre. Par exemple:

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

Merci Jason! et désolé pour le long retard de ma réponse. C'est ce dont j'avais besoin. "tasks (: include =>: personne)" n'a pas hâte de charger, j'ai juste dû le changer en "tasks.find (: all,: include =>: personne)". – Florent2

+0

Oops, c'était un oubli de ma part. J'ai mis à jour mon exemple pour appeler 'object.tasks.all (: include =>: person)'. –

Questions connexes