【问题标题】:Searching an external API through a rails form and displaying the results in the view通过 Rails 表单搜索外部 API 并在视图中显示结果
【发布时间】:2016-09-15 14:12:42
【问题描述】:

我需要使用我的 rails 应用程序中的表单提供的 2 个参数(标签和设备)从外部 API 搜索数据(教程)。

在我的路线中,我有:

resources :search_lists, only: [:index] do
  collection do
    post :search
  end
end

这是我认为我应该在SearchListsController 中输入的内容:

def index
  @search_parameter = params[:tags]
end

def search
end

我不确定我将如何组织我的代码以及我应该在哪里传递 API 调用。

这是我的看法,rails 无法识别search_lists_url

<form action="<%= search_lists_url %>">
  <input type="text" name="" value="" placeholder="Search by tag">
  <label >Filters:</label>
  <input type="checkbox" value="first_checkbox">Smarthpone
  <input type="checkbox" value="second_checkbox">Tablet
  <input type="checkbox" value="third_checkbox">Mac
  <br>
  <input type="submit" value="Search">
</form>

谁能帮帮我? :)

【问题讨论】:

  • 您的 API 调用将进入控制器的搜索操作中。

标签: ruby-on-rails api search


【解决方案1】:

如果是外部 API,则您的 API 使用者无法识别 API 应用程序的路由助手。更好的方法是让表单操作调用消费者应用程序中控制器操作的 url,然后处理此控制器操作的 API 调用。

例如,在您的 API 消费者应用程序中,您可以在路由中使用它:

post "search_lists" => "lists#search", as: :search

然后在您的controllers 目录中有一个lists_controller.rb 文件,其中包含如下搜索操作:

 class ListsController < ApplicationController
     include HTTParty

     def search
     ## make your API Call on this action
      response = HTTParty.post(your_api_host_url/search_lists/search, {body: [#your form input data##]})
     end
 end 

您可以将返回的 JSON 解析为 ruby​​ 数组并在视图中显示。 在示例中,我使用 HTTParty gem 发出 HTTP 请求,您可以使用其他可用的 ruby​​ 库来完成相同的操作。

您的表单现在可以如下所示:

<%= form_tag search_path, method: :post do %>
  <%#= Your input tags %>
<% end %>

【讨论】:

  • 它似乎对我不起作用:仍然无法识别 search_path。在路线中,您的意思是“lists_search#search”吗?
  • 路线只是一个例子。您可以使用自己的路由和控制器名称。需要注意的一点是,你需要在控制器上进行api调用并解析响应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 2014-11-29
  • 2013-01-15
  • 1970-01-01
相关资源
最近更新 更多