2017-05-11 4 views
1

POSTメソッドからリダイレクトした後、layout.erbで自動的にモーダルを開く方法はありますか?Sinatra - リダイレクトからブートストラップモーダルを開く方法

<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

AJAXを使用してトリガーできます。 – bitsapien

答えて

0

@bitsapienが示唆したように、あなたは、トリガすることができ、カートからアイテムを削除する

<span class="btn btn-success" data-toggle="modal" data-target="#cart"> 

カートモーダルは、ボタンのクリックから開きますそれはajaxと一緒に - あなたはjavascript/ajaxを使ってフォームを提出する必要があります。私はに入っていませんどのようにここには約半分+質問/答えがあるので、簡単な検索で見つけることができます。

しかし、トリガーするには、Sinatraのアクションがxhrの要求書式に応答するようにします。応答の中にxhrの要求形式の(index.html.erb、index.json.erb、などのように)あなたが必要は、とのためにユーザーをリダイレクトする場合は$('#my_modal').modal('show');

のようなものを返したいと思いますいくつかの理由は、Ajaxを使用してフォームを送信することはできません、あなたの可能性 - 「ハック」けれども - triggerのキー(例)と#my_modalの値を持つクッキーやセッションを設定し、ような何かを行うには、

<% if session[:trigger] %> 
<script><%= "$('#{session[:trigger]}').modal('show');" %></script> 
<% session.delete(:trigger) %> 
<% end %> 

にです一番美しいものではありませんが、それは機能します。

関連する問題