選択結果を一括削除したい
一括削除で検索した結果って少ないと思う。
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って配列を渡すこともできる