我在我的控制器中进行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 :(得分: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
答案 1 :(得分:0)
您在@ products.each的每次迭代中重新分配@ response1和所有其他变量,因此它具有最后一个产品的值。您必须在输出期间在视图内执行此类循环。
像这样:
<% @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 %>