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>

これは、受信した応答の 1 つだけを表示します。ビューに受信したすべての応答を表示するにはどうすればよいですか。

4

2 に答える 2

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 %>
于 2013-02-14T07:56:37.253 に答える
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
于 2013-02-14T07:55:21.183 に答える