Rails - 如何在视图上显示API响应?

时间:2017-02-05 00:23:09

标签: ruby-on-rails api

我正在构建一个连接到Yelp API的rails应用。我创建了scrape方法:

  def scrape
    @results = Yelp.client.search(params[:location], {limit: 5, category_filter: "dessert"})
    ...
    redirect_to :posts
  end

当我在 Rails控制台上尝试此操作时,我可以确认它是否有效。

results.businesses[0].name
#=> Super awesome dessert place! #it returns the right response on console

但是当我在视图上使用它时,它没有显示任何内容。

<div class="form-group">
  <%= form_tag({:controller=>"posts", :action=>"scrape"}, method: :post) do %>
    <div class="form-group">
      <%= text_field_tag :location, nil, class: 'form-control', placeholder: 'Location', style:"width: 50%", :required => true %>
    </div>
    <div class="form-group">
      <%= submit_tag 'Search!', name: nil, class: 'btn btn-success search-button'%>
    </div>
  <% end %>
</div>

<div class="center-block">
  <% if @results.blank? %>
    <h3>No result found</h3>
  <% else %>
    <% @results.businesses.each do |result| %>
...
<%= result.name %> 

我得到'No result found'。我觉得这是我设置form-group与控制器交互的方式,当我按下搜索按钮时它不会查询yelp。

如何存储此类API调用的结果并在视图上显示结果?

这更像是一个Rails问题,你不必尝试过Yelp。调用Yelp.client.search('Some City', ...)时,Yelp会通过在“某些城市”中发送餐馆列表来回复。

1 个答案:

答案 0 :(得分:2)

您的scrape操作似乎正在重定向到帖子索引操作,在这种情况下,您在@result操作中设置的scrape变量将被忽略。解决此问题的一种方法是将重定向更改为render :posts,在这种情况下,您的@results变量应该可用于帖子索引视图。