如何使用Rails 3中的复选框删除多个记录?
答案 0 :(得分:34)
routes.rb中:
resources :blog_posts do
collection do
delete 'destroy_multiple'
end
end
index.html.erb
<%= form_tag destroy_multiple_blog_posts_path, method: :delete do %>
<table>
...
<td><%= check_box_tag "blog_posts[]", blog_post.id %></td>
...
</table>
<%= submit_tag "Delete selected" %>
<% end %>
blog_posts_controller.rb:
def destroy_multiple
BlogPost.destroy(params[:blog_posts])
respond_to do |format|
format.html { redirect_to blog_posts_path }
format.json { head :no_content }
end
end
答案 1 :(得分:5)
假设您要在表格中显示记录列表,每个记录都有一个复选框,并且有一个删除按钮,可以删除所有已检查的记录。
首先,您必须为包含记录ID的复选框创建名称,您可以这样做:
<%= check_box_tag("delete[#{@thing.id}]",1) %>
这将创建包含以下内容的HTML
<input id='delete[1000]' type='checkbox' value='1' name='delete[1000]'>
因此,当您发布表单时,如果您已选中ID为1001和1002的记录框,则您的帖子将包含:
"delete[1001]"=>"1"
"delete[1002]"=>"1"
所以在你的控制器内,你可以这样做
params[:delete].each do |id|
Thing.find(id.to_i).destroy
end
答案 2 :(得分:1)
在控制器上发送所有已检查元素的ID。我假设你已经删除了要删除的Foo类的发送ID
ids = params[:ids]
Foo.where("id in (#{ids}")).destroy
或
ids = params[:ids].split(",")
Foo.where(id => ids).destroy
使用destroy,如果你有任何依赖,请不要使用delete。