2009-09-19 4 views
6

En utilisant la même forme partielle à la fois créer et éditer dans mon cas nouveau et prévisualiser. regards partiels un peu comme ça (je l'utilise HAML)= button_to ne génère pas de formulaire si déjà dans une autre forme

=form_tag ({:action => params[:action]}, :multipart => true) 
    =text_field :newsletter, :title 
    =text_area :newsletter, :body 
    =file_field :newsletter,:attachment 
    -if params[:action] == "preview" 
    =button_to "select contacts and send", :action => "contacts" 
    =submit_tag "save and preview" 

mais dans la sortie html est

... 
<input type="submit" value="select contacts and send"/> 
<input type="hidden" value="rwYnZlEpWV4dR89zjgprEALBYmP0xqM3lnKt9JDLyak=" name="authenticity_token"/> 
<input type="submit" value="save and preview" name="commit"/> 
... 

pourquoi le button_to pas générer le bouton pour former?

une solution est de garder le bouton en dehors de la partie et seulement 1 par formulaire, mais comment puis-je avoir 2 boutons dans le même formulaire?

modifier: Une autre solution serait une case à cocher cachée qui est définie par javascript si le button_to est pressé et soumet le formulaire, en les séparant dans le contrôleur

Répondre

12

HTML ne permet pas en fait des formes à être imbriquées. Certains navigateurs le font, mais vous verrez un comportement fou chez les autres. Est-ce que le HTML que vous affichez la sortie brute ou le DOM calculé à partir de firebug?

La meilleure façon de gérer ce cas est de déplacer votre button_to en dehors de l'autre formulaire. Si vous êtes cool avec les options JS uniquement, vous pouvez utiliser link_to :method => :post et le style du lien pour ressembler à un bouton.

1

En fin de compte utilisé le

:name => 'otheraction' 

dans le contrôleur vérifie alors si l'

params[:commit] or params[:otheraction] 

était dans le hachage params