rails:207
From: ABE Masahiro <abe@c...>
Date: Thu, 16 Jun 2005 16:51:07 +0900
Subject: [rails:207] 複数のsubmitボタン
あべと申します。 アイテム管理系のWebアプリなどで、テーブルを囲んだひとつのform内に 複数のsubmitボタンを配置し、押したボタンで動作を変えたくなるときが よくあります。 <%= form_tag %> <!-- アイテムをリスト表示 --> <table> <% @list.each do |item| %> <tr> <td><%= check_box_tag("sel[], item.id) %></td><!-- チェック欄 --> <td><%= item.name %></td> <td><%= item.price %></td> <td><%= link_to("編集", :action => "edit", :id => item.id) %> </tr> <% end %> </table> <!-- チェックしたものをまとめて... --> <%= submit_tag("delete", { name => "action" }) %> <%= submit_tag("update", { name => "action" }) %> <%= end_form_tag %> これでcontroller に delete や update を定義し、@params[:sel] に 集まったアイテムを処理すればよいわけですが、ボタンの名前を deleteやupdateから変えるのが困難です(とくに日本語に)。 これは古い問題で、submitタグだけがvalueの値を表示と送信で 兼用していることから発生していると思います。Googleをひくと - それぞれのボタンで name="b1", "b2" などとして @params.key?("b1") のような存在チェックで分岐しろ - ローカライズのテーブルをvalueで逆引きしろ(えー) - javascriptで... などがひっかかりますが、どれもすっきりしません。 ここはRails的にはどうしたらいいでしょうか? localizationまわりで既に解決されているのかしら。 * かつて個人的に作ったcgiライブラリでは、query_stringの解釈を 拡張して name="foo=bar" value="..." のようにすると@params[:foo] = "bar" となるようにし、 <input type="submit" name="action=update" values="更新"> <input type="submit" name="action=delete" values="削除"> のようにしていました(実際にはperlで書いてました)。 これがWebプログラミングのマナーとしてどうなのかよくわからない のですが、Railsではnameを"sel[]"のようにすると配列として扱う という拡張が既になされていますね。 actionpack/lib/action_controller/cgi_ext/cgi_methods.rb の CGIMethods::parse_query_parameters() にコードがあります。 Railsではこうする、というのがまだないのなら ここにfoo=bar拡張を追加しちゃおうかしらん... -- ABE Masahiro <abe@c...> -- ML: rails@r... 使い方: http://QuickML.com/
-> 207 2005-06-16 09:51 [abe@c... ] 複数のsubmitボタン 208 2005-06-16 13:39 ┗[yu1@t... ] 209 2005-06-16 22:31 ┗[abe@c... ]