如何使用 Rails 3 中的复选框删除多条记录?
问问题
12400 次
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 回答