我有基本的商店应用程序 - 我希望能够将产品添加到购物篮然后使用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;之后,它无法正常工作。我已经转移到购物篮/删除页面,但我有一个错误,因为购物篮/删除的帖子不存在。它应该将我重定向到我的索引页面。更重要的是,它没有删除我的购物篮项目,它仍然存在。我会感激任何帮助。
答案 0 :(得分:1)
您需要在中间件管道use Rack::MethodOverride
另一种方式似乎是set :method_override, true
类
Sinatra::Base
请参阅this also