Как удалить все записи в rails?

#ruby-on-rails #ruby #crud

Вопрос:

Мне нужно создать конечную точку /продукты, которые будут удалять все продукты из хранилища. Но я не понимаю, как это сделать, теперь у меня есть метод удаления, который удаляет только один продукт по идентификатору, это мой контроллер

 # DELETE /products/1 or /products/1.json  def destroy  @product.destroy  respond_to do |format|  format.html { redirect_to products_url, notice: "Product was successfully destroyed." }  format.json { head :no_content }  end  end    

Мой index.html

 lt;p id="notice"gt;lt;%= notice %gt;lt;/pgt;  lt;h1gt;Productslt;/h1gt;  lt;table class="table table-striped "gt;  lt;theadgt;  lt;trgt;  lt;thgt;Namelt;/thgt;  lt;thgt;Pricelt;/thgt;  lt;th colspan="3"gt;lt;/thgt;  lt;/trgt;  lt;/theadgt;   lt;tbodygt;  lt;% @products.each do |product| %gt;   lt;trgt;  lt;tdgt;lt;%= product.name %gt;lt;/tdgt;  lt;tdgt;lt;%= product.price %gt;lt;/tdgt;  lt;tdgt;lt;button type = 'button' class="btn btn-outline-info"gt;lt;%= link_to 'Show', product %gt;lt;/tdgt;  lt;tdgt;lt;button type="button" class="btn btn-outline-success"gt;lt;%= link_to 'Edit', edit_product_path(product) %gt;lt;/tdgt;  lt;tdgt;lt;button type="button" class="btn btn-outline-danger"gt;lt;%= link_to 'Destroy', product, method: :delete, data: { confirm: 'Are you sure?' } %gt;lt;/tdgt;  lt;/trgt;  lt;% end %gt;  lt;/tbodygt; lt;/tablegt; lt;brgt; lt;%= link_to 'New Product', new_product_path %gt;  

и маршруты

 Rails.application.routes.draw do  resources :products  root 'products#index' end  

Мне нужно создать кнопку, которая удалит все товары со страницы

Ответ №1:

Это не одно из семи стандартных действий REST, поэтому вы не получите дополнительной помощи от rails здесь. Один из способов, которым вы могли бы это сделать, — определить пользовательское действие.

 # routes.rb resources :products do  post :delete_all, on: :collection end  # products_controller.rb def delete_all  Product.delete_all  redirect_to :products_path end  

И вставьте ссылку/кнопку, по которой делается ЗАПИСЬ /products/delete_all . Должно выглядеть более или менее так:

 link_to 'Destroy All', delete_all_products_path, method: :post, data: { confirm: 'Are you sure?' }