2017-02-05 15 views
0

我正在構建一個連接到Yelp API的rails應用程序。我創建scrape方法:Rails - 如何在視圖上顯示API響應?

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'。我有一種感覺,就是我設置窗體組與控制器進行交互的方式,並且當我按下搜索按鈕時,它不會查詢yelp。

如何存儲此類API調用的結果並將結果顯示在視圖上?

這是一個更多的Rails問題,你不必一定嘗試過Yelp。當Yelp.client.search('Some City', ...)被調用時,Yelp通過發送'Some City'中的餐館列表來回應。

回答

1

看起來您的scrape操作正在重定向到帖子索引操作,在這種情況下,您在scrape操作中設置的@result變量將被忽略。解決此問題的一種方法是將重定向更改爲render :posts,在這種情況下,@results變量應該可用於帖子索引視圖。

+0

謝謝!不知何故,當我做'render:posts'但':index'工作時它不工作。不過,你讓我走向了正確的方向! 如果你不介意 - 我可以問一個後續問題嗎?是否正確地說我的代碼問題是'@ results'運行,但'重定向'運行並且在@ @ results'到達視圖之前完成了代碼,這就是爲什麼它沒有顯示任何值? 如果沒有,你是否介意進一步解釋(除了上面的評論)之前爲什麼代碼沒有工作? – Iggy

+0

這聽起來很正確 - 重定向將流量傳遞給了一個全新的控制器,據我所知,這會吹掉您之前設置的任何實例變量。重定向後,您的視圖可用的唯一實例變量是在您重定向到的新操作中設置的實例變量。 –