Как удалить несколько записей, используя флажки в Rails 3?
Rails 3 - удаление нескольких записей с использованием флажков
Ответ 1
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
Ответ 2
Предполагая, что вы хотите отобразить список записей в таблице, каждый из которых имеет флажок, и кнопку удаления, которая приведет к удалению всех отмеченных записей.
Во-первых, вам нужно создать имена для флажков, содержащих идентификатор записи, вы можете сделать это:
<%= check_box_tag("delete[#{@thing.id}]",1) %>
Это создаст HTML, который будет содержать следующие
<input id='delete[1000]' type='checkbox' value='1' name='delete[1000]'>
Поэтому, когда вы публикуете форму, если вы отметили поле для записей с идентификаторами 1001 и 1002, ваше сообщение будет содержать:
"delete[1001]"=>"1"
"delete[1002]"=>"1"
Итак, внутри вашего контроллера вы можете сделать это
params[:delete].each do |id|
Thing.find(id.to_i).destroy
end
Ответ 3
Отправить идентификаторы всех элементов, находящихся на контроллере. Я предполагаю, что у вас будут удаляться идентификаторы для удаления для класса Foo, подлежащего удалению.
ids = params[:ids]
Foo.where("id in (#{ids}")).destroy
или
ids = params[:ids].split(",")
Foo.where(id => ids).destroy
Используйте destroy, не используйте delete, если у вас есть какие-либо зависимости.