複数レコードの削除処理を改善 その3
チェックマークが付いたら、そのレコードの背景色を変更するようにしてみた。
observe_formで、フォームの変化を監視する。
- start_form_tagに、以下のようにidを設定した。
<%= start_form_tag({:action => 'plural_destroy'}, {:id => 'checked'}) %>
-
- 上記のように、()で引数を囲ってあげないとエラーになってしまった。
- :idを指定する時は、{}を利用して、urlの引数と区別する必要がある。
- observe_formで監視対象のフォームを指定するには、start_form_tagまたはform_tagに、idを設定する必要がある。
- フォームを含む範囲を、divで囲ってidを設定しても監視対象にはならない。
<%#------ app/views/softwares/list.rhtml ------%> ...(途中省略)... <div id="checked_with_store"> <%= render :partial => 'models/softwares/list_form' %> <%= start_form_tag({:action => 'plural_destroy'}, {:id => 'checked'}) %> ...(途中省略)... <%= 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'} %> <%= end_form_tag %> </div> ...(途中省略)...
チェックボックスの状態も考慮して、trタグのclassを設定する。
- 現状は、リストを縞模様にするために、stripeヘルパメソッドは、classの設定値としてstripe_dark、stripe_lightを返す。
- 引数を追加して、チェックボックスがチェックされている場合は、stripe_checkedも返すように拡張する。
#------ app/helpers/application_helper.rb ------ ...(途中省略)... def stripe(checked_item) @stripe = !@stripe if checked_item "stripe_checked" else @stripe ? "stripe_dark" : "stripe_light" end end ...(途中省略)...
- チェックボックスの状態をハッシュとして@checked_items変数に代入する。
#------ 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] || {} ...(途中省略)...
- stripeメソッドの引数として、チェックボックスの値を入れて呼び出す。
<%#------ app/views/models/softwares/_listd.rhtml ------%> <!--[:]--> <tr class=<%= stripe(@checked_items[listd.id.to_s]) %>> <td align=center> <%= check_box_tag "checked_items[#{listd.id}]", listd.id, @checked_items[listd.id.to_s] %> </td> ...(途中省略)...
スタイルシートに、stripe_checkedの背景色を設定する。
/*------ public/stylesheets/scaffold.css ------*/ ...(途中省略)... /* 縞模様リストの設定 */ table tr.stripe_light td { background-color: white;/* 明るい縞模様 FFFFFF*/ } table tr.stripe_dark td { background-color: azure;/* 暗い縞模様 #F0FFFF*/ } table tr.stripe_checked td { background-color: orange;/* チェックされた縞模様 #FFE4B5*/ } ...(途中省略)...