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

Ruby on rails 3 Rails 3-使用复选框删除多个记录,ruby-on-rails-3,Ruby On Rails 3,如何使用Rails 3中的复选框删除多个记录?发送控制器上所有选中元素的ID。我假设您有要删除的发送ID,以便删除Foo类 ids = params[:ids] Foo.where("id in (#{ids}")).destroy 或 使用destroy,如果您有任何依赖项,则不要使用delete。假设您希望在表中显示记录列表,每个记录都有一个复选框,并且有一个删除按钮,该按钮将导致删除所有选中的记录 首先,您必须为包含记录id的复选框创建名称,您可以这样做: <%= check_bo

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

发送控制器上所有选中元素的ID。我假设您有要删除的发送ID,以便删除Foo类

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


使用destroy,如果您有任何依赖项,则不要使用delete。

假设您希望在表中显示记录列表,每个记录都有一个复选框,并且有一个删除按钮,该按钮将导致删除所有选中的记录

首先,您必须为包含记录id的复选框创建名称,您可以这样做:

<%= check_box_tag("delete[#{@thing.id}]",1) %>
在你的控制器里,你可以这样做

params[:delete].each do |id|
  Thing.find(id.to_i).destroy
end
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 %>

.where(:id=>(params[:blog_posts])).destroy
会给我BlogPostController中的
ArgumentError\destroy\u多个\错误数量的参数(0代表1)
。如果BlogPost属于一个集合,这将如何工作?示例:/collection/1/blogpost/1感谢。使用Rails 4,我必须将splat放在params之前,比如
*params[:blog_posts]
,否则它会抛出一个错误:
ActiveRecord::AssociationTypeMismatch:BlogPost(#-580055888)预期,get String(#-603015658)
这是一个非常好的答案。您知道如何添加验证以确保用户在单击“删除”按钮时选中复选框吗?
params[:delete].each do |id|
  Thing.find(id.to_i).destroy
end
  resources :blog_posts do
    collection do
      delete 'destroy_multiple'
    end
  end
<%= 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 %>
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