0

我在我的控制器中創建一個API調用,它返回記錄列表,並將響應等同於我在視圖中調用的實例變量。將實例變量傳遞給查看

我的控制器:

@products = Product.find(:all) 
    @products.each do |product| 
     url   = URI.parse("url{product.id}") 
     @response1  = JSON.parse(Net::HTTP.get_response(url).body) 
     puts @response1 
     @title   = @response1["ProductName"] 
     @url   = @response1["ProductUrl"] 
    end 

我的觀點:

<div class= "title"><small><b><%= link_to truncate(@title, :length =>30), :target => '_blank' %></b></small></div> 

這將顯示剛接收到的響應中的一個。如何顯示在我的視圖中收到的所有回覆。

回答

0

您重新分配@響應1和@ products.each的每次迭代中的所有其他變量,因此它具有最後一個產品的值。在輸出過程中,您必須在視圖內進行這樣的循環。

像這樣:

<% @products.each do |product| %> 
    <% @response1 = JSON.parse(Net::HTTP.get_response(URI.parse("url{product.id}")).body) %> 
    <div class= "title"> 
    <small> 
     <b> 
     <%= link_to truncate(@response1["ProductName"], :length =>30), @response1["ProductUrl"], :target => '_blank' %> 
     </b> 
    </small> 
    </div> 
<% end %> 
0

而不是遍歷控制器中的響應,您可以直接在視圖中執行。

然而,這將是更好組裝的陣列控制器和迭代,在視圖中,讓你避免給視圖太多的責任,如:

@products = Product.find(:all) 
@products_with_Responses = @products.map do |product| 
    url = URI.parse("url{product.id}")  
    response = JSON.parse(Net::HTTP.get_response(url).body) 
    {:title   => response["ProductName"], 
    :url   => response["ProductUrl"]} 
end 
+0

因此,我將不得不在我看來也是API調用? – Yogzzz 2013-02-14 07:56:36

+0

不是,但是相反 - 從控制器中刪除調用並將它們放入視圖中。 – Phobos98 2013-02-14 07:57:14