通过rails表单搜索外部API并在视图中显示结果

时间:2016-09-15 14:12:43

标签: ruby-on-rails api search

我需要使用我的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>

有人能帮帮我吗? :)

1 个答案:

答案 0 :(得分:0)

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

例如,在您的API使用者应用程序中,您可以在路线中使用此功能:

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

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

 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 %>