13

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

4

3 回答 3

36

路线.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
于 2012-10-03T16:21:09.237 回答
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
于 2012-10-03T16:13:36.930 回答
1

发送控制器上所有选中元素的 id。我假设你已经发送要删除的 Foo 类的 id 被删除

ids = params[:ids]
Foo.where("id in (#{ids}")).destroy

或者

ids = params[:ids].split(",")
Foo.where(id => ids).destroy

使用destroy,如果你有任何依赖,不要使用delete。

于 2012-10-03T15:00:31.843 回答