複数レコードの削除処理を改善 その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
...(途中省略)...
#------ 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] || {}
...(途中省略)...
<%#------ 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*/
}
...(途中省略)...