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

一括削除についても、ajaxで送信してみた。

app/views/softwares/list.rhtmlの修正

  • submit_tagを、submit_to_remoteに変更した。
  • チェックボックスの値と、_list_form.rhtmlの値を送信するため、id="checked_with_store"を設定した。
<%#------ app/views/softwares/list.rhtml ------%>
<div id="checked_with_store"><%#<------ フィルターや並べ替えの条件を含めて送信する範囲のid設定 %>
  <%= render :partial => 'models/softwares/list_form' %>
<%= start_form_tag :action => 'plural_destroy' %>
  <table class="confirm" width=100%>
    <%= render :partial => 'models/softwares/listh' %>
    
    <% if !@softwares.empty? %>
      <%= render :partial => 'models/softwares/listd', :collection => @softwares %>
    <% else %>
      <tr><td colspan="6">レコードはありません。</td></tr>
    <% end %>
    
    <%= render :partial => 'models/softwares/list_page' %>
  </table>
  <%# submit_tagをsubmit_to_remoteに変更した。 %>
  <%#= submit_tag "チェックした項目を削除する", :onclick=>"return confirm('本当に削除しますか?');" %>
  <%= submit_to_remote "checked", "チェックした項目を削除する", 
        :update => "list_update", 
        :submit => "checked_with_store", 
        :url => {:action => 'plural_destroy'}, 
        :confirm => "本当に削除しますか?" %>
<%= end_form_tag %>
</div>

app/views/layouts/softwares.rhtmlへの追記

  • 削除処理に対するメッセージを表示するため、ajax更新の範囲id="list_update"を、レイアウトファイル全体に広げてしまった。(つまり、ページ全体が更新されることになる。)
<%#------ app/views/layouts/softwares.rhtml ------%>
<div id="list_update">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Softwares: <%= controller.action_name %></title>
  <%= stylesheet_link_tag 'scaffold' %>
  <%= javascript_include_tag :defaults %>
</head>
<% store_location %>
<body>
<%# render :partial=>"menu"だと、"softwares/menu"の描画になる %>
<%= render :partial=>"layouts/menu" %>

<%= render :partial=>"common/notice" if flash[:notice] -%>
<%= render :partial=>"common/error"  if flash[:error] -%>

<%= render :partial=>"layouts/flash" %>

<%= @content_for_layout %>
</body>
</html>
</div>

app/controllers/softwares_controller.rbへの追記

  • 一括削除後のページ番号を保持するため、コントローラーに@page = params[:page]を追記した。
#------ 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]
...(途中省略)...

app/views/models/softwares/_list_form.rhtmlへの追記

  • @pageをhidden_field_tagに書き込んで、現在のページ番号を保持する。
<%#------ app/views/models/softwares/_list_form.rhtml ------%>
...(途中省略)...
    <%= hidden_field_tag("page", @page) %>
...(途中省略)...