#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?' }