redirect_to在rails中使用POST

时间:2009-06-12 08:29:12

标签: ruby-on-rails ruby redirect

是否可以使用POST方法重定向?
或者是否应该使用GET进行重定向?

用于此目的是在电子商务网站的订购流程的最后步骤中,将数据发送到支付处理器,而不会为用户引入额外的步骤。

5 个答案:

答案 0 :(得分:79)

POST请求无法进行重定向 - 它是part of the HTTP/1.1 protocol

您可以引入另一个包含要发布到付款处理器的表单数据的步骤,或者您可以从您的应用程序发送帖子(我在使用PROTX时已做过的事情)。

答案 1 :(得分:14)

我通过显示包含所有产品和送货费用等的摘要页面“解决”了这个问题,典型的“确认并支付购买费用,点击下面的继续按钮”类型消息。 “继续”按钮使网站将产品数据和所有内容发送到付款处理器。

简短回答 - 是用户的另一个步骤。然而,关键是让它看起来尽可能自然,尽可能多的结账体验。这样,它就不会像“只是另一步”那样过多。

但是,如果你遇到更好的方式,我会非常有兴趣听听它是什么:)

答案 2 :(得分:11)

使用简单的javascript行,您可以让您的POST表单发布自己( form.submit())。然后,您可以隐藏表单,并在表单提交给付款处理器时向用户显示简单的“请稍候......”消息。

答案 3 :(得分:0)

想法是在您使用方法:post生成表单的过程中进行“重定向”。

我也遇到了同样的问题,并将解决方案提取到gem repost中,因此它可以为您完成所有工作,因此无需使用表单创建单独的视图,只需使用gem提供的功能redirect_post()在您的控制器上。

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

答案 4 :(得分:0)

html hack:改为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>