从POST方法重定向后,如何在layout.erb中自动打开模式?
购物车模式从按钮点击打开:
<span class="btn btn-success" data-toggle="modal" data-target="#cart">
从购物车中删除商品:
<form method="post" action="/cart/remove-product">
<input type="hidden" name="id" value="<%= item[:product_id] %>">
<input type="hidden" name="item_count" value="<%= item[:count] %>"
<input class="btn btn-danger btn-sm" type="submit" value="x">
</form>
呼叫:
class CartController < ApplicationController
post '/remove-product' do
remove_product_from_cart(request.cookies['cart_id'], params[:id], params[:item_count])
redirect back
答案 0 :(得分:0)
像@bitsapien所提到的,你可以用ajax触发它 - 这需要你使用javascript / ajax提交表单。我不会在这里进入如何,因为那里已经有大约半数以上的问题/答案可以通过简单的搜索找到。
要触发它,您的Sinatra操作会响应xhr
的请求格式。在xhr
的请求格式的响应中(如index.html.erb,index.json.erb等),您希望返回$('#my_modal').modal('show');
如果您需要来重定向用户,并且出于某种原因无法使用ajax提交表单,您可以 - 尽管&#34; hacky&#34; - 使用trigger
的密钥(示例)和值#my_modal
设置Cookie或会话,然后执行类似的操作,
<% if session[:trigger] %>
<script><%= "$('#{session[:trigger]}').modal('show');" %></script>
<% session.delete(:trigger) %>
<% end %>
它不是最漂亮的,但它确实有效。