formでもconfirm

ちょっと悩んだのでメモしておこうと思います。

何が問題か

Ruby on Railsのヘルパーメソッド「link_to」は、以下のようにすると、確認用のダイアログを出してくれます。
ダイアログで「OK」を押した場合は指定したリンク先である「Google」のトップに飛び、「キャンセル」を指定した場合には何も起こりません。

<%= link_to "test","http://www.google.co.jp",:confirm => "Googleに飛びますがよろしいですか?" %>

一方、フォームを用意して、そのフォームには「決定」というボタンがあるとします。このボタンを押した際にも確認用のダイアログを表示したいとします。
しかし、Railsでフォームを扱う場合にボタンを用意するメソッドである「submit_tag」は上記のような「confirm」オプションをサポートしていません。よって、以下のように書いても確認用のダイアログは表示されません。

<% form_tag :action => "test" do-%>
  <%= submit_tag "決定",:confirm => "よろしいですか?" %>
<% end -%>

解決策

解決策としては、「onclick」オプションを使います。このオプションは、生成されるタグのonclick属性を指定する時に使います。
そして、以下のように記述すると、フォームでも確認用ダイアログを使用できます。

<% form_tag :action => "test" do-%>
  <%= submit_tag "決定",:onclick => "return #{confirm_javascript_function("よろしいですか?")}" %>
<% end -%>

link_toメソッドにconfirmオプションを指定すると、内部的に上記の「:onclick => "return #{confirm_javascript_function("よろしいですか?")}"」と同じことが行われます。一番最初に示したコードは以下と等価です。

<%= link_to "test","http://www.google.co.jp",:onclick => "return #{confirm_javascript_function("Googleに飛びますがよろしいですか?")}" %>