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