2010-05-19 12 views
2

J'utilise rails3 beta3 et couchdb via couchrest. Je n'utilise pas d'enregistrement actif.Comment éviter que les rails ne traitent les champs d'édition_For différemment des nouveaux champs

Je souhaite ajouter plusieurs "Sections" à un "Guide" et ajouter et supprimer des sections dynamiquement via un petit javascript. J'ai regardé tous les screencasts par Ryan Bates et ils ont énormément aidé. La seule différence est que je veux enregistrer toutes les sections comme un tableau de sections au lieu de sections individuelles. En gros comme ceci:

"sections" => [{"title" => "Foo1", "content" => "Bar1"}, {"title" => "Foo2", "content" => "Bar2"}] 

Donc, en gros j'ai besoin du hachage params pour ressembler que lorsque le formulaire est soumis. Quand je crée ma forme que je fais ce qui suit:

<%= form_for @guide, :url => { :action => "create" } do |f| %> 
    <%= render :partial => 'section', :collection => @guide.sections %> 
    <%= f.submit "Save" %> 
<% end %> 

Et ma section regards partiels comme ceci:

<%= fields_for "sections[]", section do |guide_section_form| %> 
    <%= guide_section_form.text_field :section_title %> 
    <%= guide_section_form.text_area :content, :rows => 3 %> 
<% end %> 

Ok, donc quand je crée le guide avec des sections, il fonctionne parfaitement comme je voudrais. Le hash params me donne un tableau de sections comme je le voudrais. Le problème vient quand je veux éditer le guide/les sections et les sauver encore parce que les rails insère l'id du guide dans l'identification et le nom de chaque champ de forme, qui détraque le hachage de params sur la soumission de forme.

Pour être clair, voici la sortie sous forme brute pour une nouvelle ressource:

<input type="text" size="30" name="sections[][section_title]" id="sections__section_title"> 
<textarea rows="3" name="sections[][content]" id="sections__content" cols="40"></textarea> 

Et voici à quoi il ressemble lors de l'édition d'une ressource existante:

<input type="text" value="Foo1" size="30" name="sections[cd2f2759895b5ae6cb7946def0b321f1][section_title]" id="sections_cd2f2759895b5ae6cb7946def0b321f1_section_title"> 
<textarea rows="3" name="sections[cd2f2759895b5ae6cb7946def0b321f1][content]" id="sections_cd2f2759895b5ae6cb7946def0b321f1_content" cols="40">Bar1</textarea> 

Comment puis-je forcer les rails à toujours utiliser le nouveau comportement des ressources et ne pas ajouter automatiquement l'identifiant au nom et à la valeur. Dois-je créer un générateur de formulaire personnalisé? Y a-t-il un autre truc que je peux faire pour empêcher les rails de mettre l'identifiant du guide là-dedans? J'ai essayé beaucoup de choses et rien ne fonctionne.

Merci d'avance!

Répondre

1

Ok, je pense que j'ai compris quelque chose qui fonctionne. Modification de la première ligne du partiel à:

<%= fields_for "sections", section, :index => "" do |guide_section_form| %> 

Cela semble fonctionner correctement. De cette façon, la nouvelle forme et la forme d'édition se ressemblent sous le capot et le hachage params fonctionne exactement comme j'en ai besoin. Si quelqu'un voit quelque chose de mal avec cela ou a une autre alternative, s'il vous plaît faites le moi savoir.