複数レコードの削除処理を改善 その1
一括削除ボタンを押した時に確認ウィンドウを表示する。
今まで、確認ウィンドウを表示するには、:confirm => "確認メッセージ" オプションを設定してきた。
<%= link_to '削除', {:action => 'destroy', :id => 1}, :confirm => "本当に削除しますか?" %>
その流れで、以下のようにやってみたが、これでは確認ウィンドウは表示されず、ダイレクトに削除されてしまう。どうやら、link_toのconfirmは、html_optionsで指定しているが、submit_tagには、html_optionsが存在しないのが原因のようだ。
<%= submit_tag '削除', :confirm => "本当に削除しますか?" %>
submit_tagが生成するhtmlとして、確認ウィンドウを表示する指定ができないのかと思い、以下のようにやってみたら、あっさり確認ウィンドウが表示されてしまった...。手っ取り早く、ヘルパメソッドを使わずにこのままhtmlコードを書いてしまうことにした。
<input name="commit" type="submit" value="削除" onclick="return confirm('本当に削除しますか?');" />
...が、後日、以下のように指定しても良いことを知った。ちゃんとオプション指定が出来るのであった...。
<%= submit_tag "削除", :onclick=>"return confirm('本当に削除しますか?');" %>
削除したことをちゃんとメッセージで伝える。
コントローラーを以下のように修正した。
- チェックマークなしで、一括削除するとエラーになってしまうので修正。
- 削除した時は、何件削除したかを表示して、操作が完了したことをフィードバックする。
#------ app/controllers/softwares_controller.rb ------ def plural_destroy if params[:checked_items] items = params[:checked_items].keys Software.destroy(items) flash[:notice] = "#{items.size}件、削除しました。" else flash[:notice] = "削除対象がありません。チェックマークで指定してください。" end redirect_to :action => 'list'