選択結果を一括削除したい

一括削除で検索した結果って少ないと思う。 
 

views/rentals/search.html.erb

検索結果をform_tagで囲む

#一部抜粋
<%= form_tag(:action=>:confirm, :name=>"ChooseForm") do %>
 <table>
 <%== result_title_tip -%>
 <%= render(:partial=>'result', :collection=>@rentals) -%>
 </table>
 <%= submit_tag "削除内容確認"%>
<%- end %>

result_title_tipはヘルパーで作る。

views/rentals/_result.html.erb

削除選択用にチェックボックスを用意する。
アクションがsearchの時だけチェックボックスが出現する。

#一部抜粋
<td>
<%- if action_name="search" %>
<%== check_box_tag("confirm[#{result.id}]", result.id)%></br>
<% end %>
<%= link_to result.status, :controller=>:rentals, :action=>:show, :id=>result -%>
</td>

こんな感じでパラメータが飛ぶ

"confirm"=>{"11746"=>"11746","11747"=>"11747"},

controllers/rentals_controller.rb confirm

確認用画面を作る。
表示用に@rentalsを作る。sessionにIDを保存する。

  def confirm
    unless params[:confirm].nil?
      items=params[:confirm].keys.sort
      session[:delete_items]=items
      @rentals = Array.new
      items.each{|item|
        r = Rental.find(item)
        @rentals.push(r)
        }
    else
      flash[:notice]="削除項目が選択されませんでした。"
      redirect_to :action=>:search #適当
    end
  end

 

confirm.html.erb

削除するアイテム一覧、最終確認だよ。

<table>
	<%== result_title_tip -%>
	<%= render(:partial=>'result', :collection=>@rentals) -%>
</table>
<p>表示されているアイテムを削除しますか?</p>
<%= form_tag :action=>"destroy_many" do %>
<%== link_back %>
<%= submit_tag "削除", :confirm =>'後悔しない?', :class=>"button_link" %>
<% end %>

form_tagに「=」を付け忘れるとNGなRails3
session[:delete_items]があるので、form_tagの中身は空っぽで構わない。
 

controllers/rentals_controller.rb destroy_many

rails destroy deleteを参照しておくこと

  def destroy_many
    items = session[:delete_items]
    Rental.destroy(items)
    flash[:notice] = items.length.to_s + "件を削除しました"
    session[:delete_items]=nil
    redirect_to :action=>:search
  end

destroyって配列を渡すこともできる