checkbox を一括選択させる link_to_remote

チェックボックスを一括選択させたり、一括解除させたりするリンクを作成してみました。


ちなみに、

<table>
  <tr>
    <td>
      <%= check_box_tag "del_ids[]", user.id %>
    </td>
    <td>
      <%= check_box_tag "hit_ids[]", user.id %>
    </td>

こんなかんじに各用途でチェックボックスがあるとき用


view 側

<div>
  削除:
  <%= link_to_remote 'すべて選択', :url => {:action => "check_all", :aim => "del"} %>&nbsp;
  <%= link_to_remote '選択を解除', :url => {:action => "uncheck_all", :aim => "del"} %><br />
  当選:
  <%= link_to_remote 'すべて選択', :url => {:action => "check_all", :aim => "hit"} %>&nbsp;
  <%= link_to_remote '選択を解除', :url => {:action => "uncheck_all", :aim => "hit"} %>
</div>

controller 側

  # すべて選択
  def check_all
    render :update do |p|
      p << <<-END
        boxes = document.getElementsByName('#{params[:aim]}_ids[]');
        for(i = 0; i < boxes.length; i++){
          boxes[i].checked = true;
        }
      END
    end
  end
  
  # 選択を解除
  def uncheck_all
    render :update do |p|
      p << <<-END
        boxes = document.getElementsByName('#{params[:aim]}_ids[]');
        for(i = 0; i < boxes.length; i++){
          boxes[i].checked = false;
        }
      END
    end    
  end


やっぱり Ajax は便利なんだろうなあ