Ive a créé un modèle imbriqué à partir de l'exemple RailsCasts Nested Model Form Part 2 et l'a fait fonctionner avec Rails 3 et JQuery. Actuellement, un utilisateur peut créer un nouveau projet et cliquer sur un lien pour ajouter de nouvelles tâches, et dans chaque nouvelle tâche, cliquer sur un lien qui lui permettra d'ajouter de nouvelles affectations à chaque tâche. Voici le lien pour créer une nouvelle tâche (le lien pour créer de nouvelles affectations est similaire):Création automatique d'un modèle imbriqué à l'aide de l'assistant 'link_to_add_fields'
<p><%= link_to_add_fields "Add task", f, :task %></p>
qui fait référence à cette aide:
def link_to_add_fields(name, f, association)
new_object = f.object.class.reflect_on_association(association).klass.new
fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
render(association.to_s.singularize + "_fields", :f => builder)
end
link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))end
Il fonctionne comme ceci: En cliquant sur le lien, html est ajouté via JQuery qui affiche un champ de formulaire pour le nom de la tâche et un lien qui permet à un utilisateur d'ajouter de nouvelles affectations à la tâche. Ce que je voudrais faire, c'est que les formulaires d'affectation apparaissent à côté du champ du nom de la tâche - de sorte que l'utilisateur n'a pas besoin de cliquer sur un lien supplémentaire pour ajouter de nouvelles affectations à chaque tâche. Je peux y arriver lorsque la page charge par le contrôleur de projet:
1.times do
task = @product.tasks.build
1.times { task.assignments.build}
end
Cependant, comme Im en utilisant JQuery pour ajouter et supprimer HTML, le contrôleur ne sera pas appelé et les formulaires ne seront pas construire quand ' ajouter de nouvelles tâches.
Existe-t-il un moyen de «construire» automatiquement les champs d'affectation imbriqués (à partir de la partie partielle de la tâche) lorsque le nouveau champ de tâche est créé?
Voici mon partielle pour la forme de tâche qui est créé lorsqu'un utilisateur clique sur le lien « nouvelle tâche » sous la forme:
<div class = "fields">
<%= f.label :name, "Task name"%>
<%= link_to_remove_fields "remove", f %><br />
<%= f.text_field :name %>
<% f.fields_for :assignments do |builder| %>
<%= render 'assignment_fields', :f => builder %>
<% end %>
<p><%= link_to_add_fields "Add assignments", f, :assignments %></p>
Je ne sais pas si vous êtes toujours à la recherche d'une réponse, mais il y a eu une Railscast révisée sur ce http://railscasts.com/episodes/196-nested-model-form-revised~~V~~3rd – spullen
Je voudrais aussi recommande d'utiliser la gemme [cocoon] (https://github.com/nathanvda/cocoon) pour gérer les parties de formulaire imbriquées. – spullen