Rails中通過checkbox實現批量刪除


在Rails生成的控制器模版中,包含的destroy只能處理單個對象,而批量刪除要求能夠同時處理多個對象,這需要自定義一個批量操作action。批量刪除的效果圖如下:
deleting multiple records

每一行記錄的第一列設置成checkbox,用於標記此行是否被選中。表下方放置一個全選checkbox,表示全部選中或全部反選。全選和反選的JavaScript代碼如下:

<script>
function toggle_checkall(field_name, state) {
  var checkboxes = document.getElementsByTagName('input');
  var count = checkboxes.length;
  for (var i = 0; i < count; i++) {
    if (checkboxes[i].type == "checkbox"
        && checkboxes[i].name == field_name + "_ids[]") {
      checkboxes[i].checked = state;
    }
  }
}
</script>

在routes.rb中配置批量刪除action:

resources :departs do
  delete 'destroy_multiple', : on => collection
end

在index.html.erb中添加代碼:

<%= form_tag destroy_multiple_departs_path, method: :delete do %>
<%= submit_tag "刪除選中" %>
<table>
...
<th><input type="checkbox" onclick="toggle_checkall('depart', this.checked);" /></th>
...
<td><%= check_box_tag "depart_ids[]", depart.id %></td>
...
</table>
<% end %>

在controller中添加批量刪除實現代碼:

def destroy_multiple
  Depart.destroy(params[:depart_ids]) unless params[:depart_ids].blank?
  respond_to do |format|
    format.html { redirect_to departs }
    format.json { head :no_content }
  end
end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章