2009-01-06 7 views
2

J'ai deux formes dans mon application rails. Ils existent tous deux dans des onglets séparés et quand je soumets un formulaire, je veux que les données de l'autre formulaire soient également sauvegardées. Comment devrais-je faire ça? Ou y a-t-il une meilleure façon de le faire au lieu d'utiliser deux formulaires distincts? Existe-t-il un meilleur moyen de diffuser un formulaire long en plusieurs onglets et quand j'appuie sur soumettre, toutes les données de tous les onglets devraient atteindre mon action. Merci.Deux formes ayant la même action

Répondre

5

Vous pouvez développer un formulaire unique pour couvrir tous les éléments des deux formulaires.

Ceci est parfaitement correct, à condition que les étiquettes de formulaire s'inscrivent valablement dans le X/HTML.

<form action='action1'> 
    <!-- All elements from both forms, plus tabs, etc. --> 
</form> 

La seule chose à considérer est que s'il y aura jamais une autre forme dans cette région qui devra aller à une autre action. Par exemple, si vous ajoutez un troisième onglet, entre les deux autres, cela aura une action différente.

Vous ne voulez pas finir comme:

<form action='action1'> 

    <!-- elements from the combined forms --> 

    <form action='action2'> 
     <!-- elements for a totally different form, not valid inside another form -->  
    </form> 

    <!-- more elements from the combined forms --> 

</form> 

Dans ce cas, il serait préférable de consolider les deux formes à soumettre le temps en utilisant JavaScript.

jQuery (jquery.com) rendrait cela plutôt facile. Par exemple, vous pouvez sérialiser les deux formulaires, puis les concaténer et envoyer le résultat au serveur par courrier ou par courrier électronique.

Voir http://docs.jquery.com/Ajax/serialize.

Il pourrait y avoir de meilleurs moyens de le faire, mais je ne peux pas penser à tout de ma tête.

1

Je ne peux pas tester si le concept fonctionne en ce moment, mais je crois que vous pouvez utiliser jQuery pour y parvenir, la fonction d'envoi intercepte toutes les soumissions de formulaire sur un onglet, quelque chose le long de ces lignes

$("form").submit(function(event){ 
    event.preventDefault(); 
    //serialize forms here and submit using jquery post 
}); 
0

Vous devriez regarder dans la méthode fields_for. Vous pouvez faire quelque chose comme ceci:

<% form_for @house do |f| %> 
    <%= f.text_field :square_feet %> 

    <% fields_for @listing do |s| %> 
    <%= s.hidden_field :id %> 
    <%= s.text_field :asking_price %> 
    <% end %> 

    <%= f.submit %> 
<% end %> 

Et puis dans votre contrôleur que vous voulez faire quelque chose comme ceci:

house = House.find(params[:id]) 
house.update_attributes(params[:house]) 
listing = Listing.find(params[:listing][:id]) 
listing.update_attributes(params[:listing]) 

C'est une mise à jour, mais vous pouvez faire ce que vous voulez là-dedans.

Questions connexes