首页 > 解决方案 > 控制器如何响应以从 Ruby 中的另一个网站重定向的操作

问题描述

我是红宝石的新手。我想将包含 API 密钥和其他一些字段数据的表单数据发布到另一个网站,该网站将验证并向我的网站发送 http 响应 200 或 400。如果我能够连接到 api,该网站会响应一个 URL 重定向到我的网站,并带有我的网站将响应的附加查询字符串。我不知道如何做以下事情:

如何让我的网站响应我通过控制器和操作从网站获得的重定向。假设控制器是:

 class BooksController < ApplicationController

  def create
   Do something

   flash[:notice] = " book was created successfully"
  end

end

配置我的路由以响应重定向

这是我试图在视图中使用的代码

   <form action="/master/master" method="POST" >
    <script
    src="https://js.example.co/v7/inline.js" 
    data-key= <%= ENV["EXAMPLE_PUBLIC_KEY"] %>
    data-email= <%= current_user.email %> 
    data-booktitle= <%= current_user.books.title %>
    data-ref= <% SecureRandom.random_number %> 
 >
  </script> 
  </form>

标签: ruby-on-railsrubyruby-on-rails-5

解决方案


这只是如何将表单发布到外部网站的基础知识。您必须自己填写详细信息,因为我不知道外部网站做什么或该脚本应该完成什么。

设置表单以发布到远程 url 非常简单:

# Rails 4 and earlier
<% form_tag("http://example.com/test.php", method: :post) %>
  <%= hidden_field_tag :key, ENV["EXAMPLE_PUBLIC_KEY"] %>
  <%= hidden_field_tag :title, current_user.books.title %>
  <%= hidden_field_tag :ref, SecureRandom.random_number %>
  <%= submit_tag %>
<% end %>

# Rails 5+
<%= form_with(url: "http://example.com/test.php", method: :post) do |f| %>
  <%= f.hidden_field :key, value: ENV["EXAMPLE_PUBLIC_KEY"] %>
  # ...
<% end %>

处理来自外部网站的回调与您的 rails 应用程序中的任何其他路线并没有真正的不同:

get '/some/path', to: 'foo#bar'

您只需创建一个响应 GET 的路由,并配置处理表单提交的任何服务以重定向回它。


推荐阅读