如何在不使用表单的情况下从 Rails 应用程序发布到外部 url
Posted
技术标签:
【中文标题】如何在不使用表单的情况下从 Rails 应用程序发布到外部 url【英文标题】:How to post to external url from rails app without using form 【发布时间】:2015-07-01 05:25:28 【问题描述】:我可以使用 html 表单发布到我的支付网关。但是我有一个新的要求。现在,单击“付款”按钮后,我必须验证项目是否仍可购买,如果可用,则自动将付款表格发布到网关。
也就是说,我想在单击按钮时执行一些 Rails 控制器代码,然后如果验证成功,则希望使用参数重定向到外部 URL(支付网关)。
我读到了,在 rails 中使用 redirect_to 是不可能的。也不能使用 ajax 发布到外部 url。我应该如何实现它?
【问题讨论】:
我就是这样处理的。在结帐页面上 - 我没有生成付款表格,而是生成了一个指向“付款”操作的链接,其中包含远程:true。然后我验证了所有关于“付款”操作的检查。验证失败时重定向到主页,支付成功时渲染payment.js.erb。为付款表单编写了新的部分“_payment_form.html.erb”。现在在 payment.js.erb 中,我即时渲染 payment_form 并将其添加到一些 div 并使用 jquery 提交表单。 【参考方案1】:你可以像这样使用 Ruby 的Net::HTTP:
require "net/http"
require "uri"
uri = URI.parse("http://example.com/search")
params = "foo" => "value one", "bar" => "value two"
# Shortcut way
response = Net::HTTP.post_form(uri, params)
# With more control
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data(params)
response = http.request(request)
puts response.code # => 200
puts response.body # => The body (HTML, JSON, etc)
【讨论】:
实际上,我想在成功验证后重定向到我的支付网关。我通过使用ajax发布(远程:true)然后对控制器的操作(支付)进行所需的验证并呈现payment.js.erb然后在payment.js.erb中呈现一个表单并使用jquery将其提交给支付网关。 感谢您的回答。它帮助我完成了我想要在应用程序本身中捕获响应的退款 API 调用。以上是关于如何在不使用表单的情况下从 Rails 应用程序发布到外部 url的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用自动模型表单的情况下从 Django 的文本框中获取数据?
如何在不提交 HTML 表单的情况下从数据库中获取数据? [复制]
如何在不通过视图在所有页面中发送表单的情况下从 django 布局(如“base.html”)获取表单数据?
Rails - 如何在不更改页面和更新视图的情况下提交表单?