Rails:调用API(另一个域)来获取搜索结果

时间:2016-09-11 03:57:34

标签: jquery ruby-on-rails ajax forms

我在Rails中遇到一个非常简单的流程时遇到了麻烦。我希望在某些文本中有一个用户类型,然后调用后端,然后该后端将向另一个域中的RESTful API发出GET请求。然后,我想使用此信息显示搜索结果,但由于某种原因,我无法访问我设置的变量。

houses_controller.rb

<%= form_tag("/houses/search", method: "get", remote: true) do %>
    <%= label_tag(:query, "Search for:") %>
    <%= text_field_tag(:query) %>
    <%= submit_tag("Search") %>
<% end %>

<% if(@search_results.nil?) %>
  <p>nil....</p>
<% else %>
    <% @search_results.each do |res| %>
      <p>
        "result..."
      </p> 
    <% end %>
<% end %>

index.html.erb

Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  root :to => "houses#index"
  get "/houses/search" => "houses#search"
end

的routes.rb

remote: true

我从根页面开始,我在form_tag中使用了"No template found for HousesController#search, rendering head :no_content",因为我相信这是人们做AJAX请求的方式吗?我是否完全关闭使用rails以这种方式执行ajax请求?我更喜欢使用jquery,但似乎这是Rails的方法。

我也尝试过使用search.html.erb,因为我在调试时看到了一条消息@search_results,但即使我添加了该文件,它也没有什么区别,因为它仍在渲染索引。 html.erb文件并完全忽略search.html.erb文件。

我还尝试在索引操作中设置std::istringstream。它可以工作,如果我在那里设置它但我不想要我在那里设置的静态值,我想要在我调用'search'动作时生成的值。

1 个答案:

答案 0 :(得分:0)

如果你使用remote:true,你应该创建一个search.js.erb而不是html.erb。您可以使用respond_to块并指定js调用的行为。