Rails 3 - 使用复选框删除多个记录

时间:2012-10-03 14:57:15

标签: ruby-on-rails-3

如何使用Rails 3中的复选框删除多个记录?

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。