Sinatra - 删除动作

Sinatra - delete action

我有基本的商店应用程序 - 我希望能够将产品添加到购物车,然后使用 Sinatra 将其删除。我的添加有效,但我也无法使删除有效。我对此有特殊的功能,但现在我只想看看删除路由是否有效。我的主要应用程序有很多路线,我正在谈论的部分是:

    post '/basket' do  #it works, adds to basket and redirects
      AddToBasket.new(params).call
      redirect '/'
    end


     delete "/basket/delete" do #it doesn't work at all and doesn't redirect
      basket = BASKET.find{|p| p.id == params["id"]}    
      BASKET.delete(basket)
      redirect "/"
     end

在 HTML 我有:

 <% basket.each do |b| %>
 <form action="basket/delete" method="post">
    <input type="hidden" name="_method" value="delete">
    <input type="hidden" name="id" value=<%= b.id %>>
    <button type="submit">Delete</button>
 </form>
<% end %>

如您所见,在单击 "Delete" 按钮后,我在我的参数助手中发送了 "id"。

basket = BASKET.find{|p| p.id == params["id"]} 

应该找到一个具有此 ID 的特定项目并将其从我的大数组 BASKET 中删除。但它不起作用,在单击 "Delete" 后,我被转到 basket/delete 页面并且出现错误,因为 basket/delete 的 post 不存在。它应该将我重定向到我的索引页面。更重要的是,它并没有删除我的购物篮项目,它仍然存在。我将不胜感激任何帮助。

您的中间件管道中需要此组件 use Rack::MethodOverride

另一种方式似乎是 set :method_override, true 在你的 Sinatra::Base class

参见 this also