2009-09-19 11 views
6

私のケースでは、createとeditの両方で同じフォームpartialを使用します。 部分多少のようになります(私はHAMLを使用)= button_toは他のフォームに既に存在する場合はフォームを生成しません

=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" 

が、HTML出力で

... 
<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"/> 
... 

なぜbutton_toがボタンにフォームを生成しないのですか?

解決策はボタンを部分的に外に保ち、フォームあたり1つのみ、 ですが、同じフォームで2つのボタンを使用するにはどうすればよいですか?

編集: 別の回避策は、コントローラにそれらを分離、button_toを押すと、フォームを送信している場合はJavaScriptで設定されている非表示のチェックボックスになり

答えて

12

フォームが入れ子にされるのHTMLは、実際にはできません。一部のブラウザでは動作しますが、他のブラウザでは狂った動作が見られます。あなたが生の出力や計算されたDOMをファイヤーバグから見せているHTMLはありますか?

このケースを処理するための好ましい方法は、button_toを他のフォームの外側に移動することです。 JS専用のオプションでうまくいけば、link_to :method => :postを使用して、リンクのスタイルをボタンのようにすることができます。最後に

1

はどちらか

params[:commit] or params[:otheraction] 

がparamsハッシュ

1

にあった場合、コントローラで

:name => 'otheraction' 

が、私はbutton_link_toと呼ばれる宝石を構築するにチェックを使用しました。

button_link_toメソッドを使用するとボタンタグが生成されますが、フォームタグはネストされません。

link_toのように使用してください。

ここからより多くの情報を得ることができます。http://button-link-to.herokuapp.com/

:あなたがデモを見たい場合は https://github.com/tonilin/button_link_to

関連する問題