Rails中实现批量删除

在Rails生成的控制器模版中,包含的destroy只能处理单个对象,而批量删除要求能够同时处理多个对象,这需要自定义一个批量操作action。批量删除的效果图如下:

每一行记录的第一列设置成checkbox,用于标记此行是否被选中。表下方放置一个全选checkbox,表示全部选中或全部反选。全选和反选的JavaScript代码如下:


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;

}

}


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

1

2

resources :shops do<br>collection do<br>        post :import<br>        get :association_brand<br>        post :update_valid<br>        delete :destroy_multiple<br>      end

end<br><br>

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

1

2

3

4

5

6

7

8

9

10

<%= form_tag destroy_multiple_admin_shops_path, method: :delete do %>

<%= submit_tag "删除选中" %>

<table>

...

<th><input type="checkbox" onclick="toggle_checkall('shop', this.checked);" /></th>

...

<td><%= check_box_tag "shop_ids[]", shop.id %></td>

...

</table>

<% end %><br><br>

在controller中添加批量删除实现代码:

1def destroy_multiple<br>      if params[:shop_ids].blank?<br>          redirect_to :back, :alert => '请选择待删除项'<br>      else<br>          shops = Shop.find params[:shop_ids]<br>          shops.each do |shop|<br>              shop.destroy<br>          end<br>      end<br>      respond_to do |format|<br>        format.html { redirect_to admin_shops_url }<br>        format.json { head :no_content }<br>      end<br>end

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容