Sinatra - 删除操作

时间:2016-07-13 09:03:55

标签: ruby sinatra

我有基本的商店应用程序 - 我希望能够将产品添加到购物篮然后使用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 %>

如您所见,点击&#34;删除&#34;按钮,我发送&#34; id&#34;在我的参数助手。

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

应找到一个具有此ID的特定项目,并从我的大数组BASKET中删除它。但在点击&#34;删除&#34;之后,它无法正常工作。我已经转移到购物篮/删除页面,但我有一个错误,因为购物篮/删除的帖子不存在。它应该将我重定向到我的索引页面。更重要的是,它没有删除我的购物篮项目,它仍然存在。我会感激任何帮助。

1 个答案:

答案 0 :(得分:1)

您需要在中间件管道use Rack::MethodOverride

中使用此组件

另一种方式似乎是set :method_override, true

中的Sinatra::Base

请参阅this also