複数レコードの削除処理を改善 その4

チェックボックスに一括でチェック「あり」「なし」を指定できるようにしてみた。

操作リンクの追加

  • 「すべて 選択 | 解除」のリンクをlink_to_remoteで作成した。
  • :check_allパラメーターにtrue、falseを設定して、コントローラーのlist_updateメソッドを呼び出す。
  • :check_allはハッシュのデフォルト値になる。
  • この時、チェックボックスのフォームは送信しない。
<%#------ app/views/softwares/list.rhtml ------%>
...(途中省略)...
  <%= submit_to_remote "checked", "チェックした項目を削除する", 
        :update => "list_update", 
        :submit => "checked_with_store", 
        :url => {:action => 'plural_destroy'}, 
        :confirm => "本当に削除しますか?" %>
  <%= observe_form :checked, 
        :update => "list_update", 
        :submit => "checked_with_store", 
        :url => {:action => 'list_update'} %>
  <%#------ 以下smallタグ内を追記 ------%>
  <small>
    すべて
    <%= link_to_remote "選択", 
          :update => "list_update", 
          :submit => "store", 
          :url => {:action => 'list_update', 
                   :check_all => true} %> |
    <%= link_to_remote "解除", 
          :update => "list_update", 
          :submit => "store", 
          :url => {:action => 'list_update', 
                   :check_all => false} %>
  </small>
<%= end_form_tag %>
</div>
...(途中省略)...

ハッシュのデフォルト値を設定する。

  • コントローラーでは、ハッシュのデフォルト値を設定した。
  • ハッシュには、本来チェックマーク付きのチェックボックスのidと値が入っているが、ここでは空のハッシュになる。
#------ app/controllers/softwares_controller.rb ------
...(途中省略)...
  def set_pagination
    #パラメーターを取得
    @keyword_id = params[:keyword] || (params[:software] && params[:software][:keyword_id]) || "%"
    @order_field = params[:order_field] || params[:store_order_field] || "id"
    @order_direction = params[:order_direction] || params[:store_order_direction] || "ASC"
    @search_word = params[:store_search_word]
    @page = params[:page]
    @checked_items = params[:checked_items] || {}
    @checked_items.default = params[:check_all] #<------追記
...(途中省略)...
<%#------ app/views/models/softwares/_listd.rhtml ------%>
<%= check_box_tag "checked_items[#{listd.id}]", listd.id, @checked_items[listd.id.to_s] %>


以上で、一括削除の機能追加は、ひとまず完了。現在の見た目はこんな感じだ。