2010-08-12 12 views
0

IntroComment produire plusieurs formulaires pour une forme imbriquée?

J'ai un objet @organization qui has_many: quick_facts

Fondamentalement, je veux produire un _form pour chacun: quick_fact mais avec un bouton de sauvegarde, qui enregistre toutes les quick_facts.

Mes deux problèmes:

premier problème:

Mes quick_facts ne sont pas préremplis avec leurs informations. Ils n'apparaissent que vides pour chaque quick_fact que j'ai.

Deuxième problème

Un bouton d'enregistrement apparaît sur chaque formulaire unique

Ma triste tentative triste:

- for quick_fact in @organization.quick_facts 
- fields_for :quick_facts do |f| 
    = f.error_messages :header_message => FORM_ERROR_HEADER_MESSAGE, :message => FORM_ERROR_MESSAGE 
    = f.label :quick_fact, 'QuickFact' 
    %br/ 
    = f.select :quick_fact, QUICK_FACTS, {} 
    %br/ 
    = f.submit 'save', :class => 'button' 

Répondre

1

Vous voulez vraiment juste une forme ici, puisque vous voulez soumettre tout à la fois.

Voici ce que je recommande:

Utilisez une partie pour rendre l'étiquette et l'option texte du fait rapide (si vous voulez qu'il soit du texte). Vous souhaitez que ce partiel soit rendu une fois par fait, utilisez l'option: collection de la méthode render pour spécifier les collections de faits rapides. Chaque partie aura sa propre copie locale de tout ce que vous voulez faire, et une variable appelée quickfact_counter sera également créée.

De plus, vous voulez utiliser l'option: les habitants de passer la forme à la partie en tant que variable locale, de sorte que vous pouvez faire f.label, f.text_area

Donc, en conclusion, votre nouvelle forme sera quelque chose comme ceci:

<% form_for @organization do |form| %> 
    <%= render :partial => "partial_name", :collection => @organization.quick_facts, :locals => {:form => form} %> 
    <%=form.submit 'save', :class => 'button'%> 
<% end %> 

Ensuite, votre partie aura juste

<%= form.label :quick_fact, 'QuickFact' %> 
<%= form.text_field :quick_fact %> 

Si vous voulez obtenir encore colombophile vous pouvez utiliser une mise en page pour rendre le formulaire et il s'en remet au partiel, mais cela devrait être suffisant pour vous aider à démarrer. Pouvoir passer une collection à une partie est l'une de mes fonctionnalités Rails préférées.