複数レコードの削除処理を改善 その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'