web-dev-qa-db-ja.com

POST in railsを使用してredirect_to

POSTメソッドを使用してリダイレクトできますか?
それとも、常にGETを使用してリダイレクトする必要がありますか?

これを使用するのは、eコマースサイトの注文プロセスの最後のステップであり、ユーザーに余分なステップを導入することなく、データを支払いプロセッサに送信します。

59
andi

POSTリクエスト-リダイレクトはHTTP/1.1プロトコルの一部)ではリダイレクトできません。

フォームのデータを含む別のステップを支払いプロセッサーにPOSTするか、アプリケーションから投稿を送信することができます(PROTXでの作業中に行ったこと)。

79
Codebeef

すべての製品と配送料などの概要ページを表示することで問題を「解決」しました。典型的な「購入を確認して支払うには、下の続行ボタンをクリックしてください」と入力します。続行ボタンにより、サイトはPOST製品データとすべての支払い処理者に渡されます。

短い答え-そこにisユーザーのための別のステップ。ただし、重要なのは、できるだけ自然に見えるようにすることです。このように、それは「ちょうど別のステップ」としてあまり出くわしません。

しかし、あなたがdoより良い方法に出くわした場合、私はそれが何であったかを聞くことに非常に興味があります:)

14
Mark Embling

JavaScriptの簡単な行を使用して、POSTフォームに自分自身を投稿させることができます(form.submit())。その後、フォームを非表示にし、シンプルなフォームが支払い処理者に送信されている間、ユーザーに「しばらくお待ちください...」メッセージ。

11
Alsciende

考え方は、内部で:postメソッドを使用してフォームを生成しながら、「リダイレクト」を作成することです。

私は同じ問題に直面し、解決策をgem repostに抽出しましたので、あなたのためにすべての仕事をしているので、フォームで別のビューを作成する必要はなく、gem関数が提供するredirect_post()コントローラー。

class MyController < ActionController::Base
...
  def some_action
    redirect_post('url', params: {}, options: {})
  end
...
end
0
yaro

htmlハック:代わりにredirect_to、このhtmlテンプレートをレンダリングします(Alsciendeの回答に基づいて)

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

<form id="step" name="step" action="<%= URL %>" method="POST">
  <!-- optional params -->
  <input type='hidden' name='token' value='e7295d6d1cd512a8621f1de5965b90a' />

</form>

<script type="text/javascript">
 $(document).ready(function () {
   setTimeout(function () {
     $("#step").submit();
   }, 0);
 });
</script>
0
Abel