0

私のビューには次のAPI呼び出しがあり、頻繁に再利用しています。

<%@products.each do |product|%>
        <%  url_raw = URI.parse("url=#{product.wmt_id}") %>
        <%  url = Net::HTTP.get_response(url_raw).body %>
        <%  if url.empty? %>
            <%  @title          = "Product Unavailable via API" %>
            <%  @url            = "Product Unavailable via API" %>
            <%  @cover_img      = "180X180.jpg" %>
            <%  @price          = "Product Unavailable via API" %>
        <% else %>
        <%  begin %>
        <%      @response1  = JSON.parse(url) %>
        <%  @title          = @response1["ProductName"]%>
        <%  @url            = "{@response1["ProductUrl"]}"%>
        <%  @cover_img      = @response1["ImagePath"]%>
        <%@price = @response1["currentItemPrice"]%>
        <%rescue%>
        <%end%>
        <%end%>

コードを枯渇させて、これをメソッドとして定義し、再利用できるようにするための最も効率的な方法は何でしょうか。このコードを3つの別々のビューファイルで使用した場合、どこに配置する必要がありますか?

4

1 に答える 1

0

これが同じコントローラーで使用されている場合は、調べてapp/helpers/products_helper.rbください (コントローラーの名前が異なる場合は、コントローラー名を製品に置き換えてください)。

これが多くのコントローラーで使用される場合app/helpers/application_helper.rb、すべてのビューがそれにアクセスできるように属します。

インスタンス変数の使用を大幅に減らすことができ、コードはヘルパーで大幅にクリーンになると思います。ビューやヘルパーではなく、コントローラーにこのデータをロードすることをお勧めします。そうすれば、ビューは API 呼び出しを繰り返すのではなく、与えられた情報を使用するだけです。このようなeager-loadingはあなたの状況では実用的ではないかもしれませんが、少なくともこれは視野に入れるべきではありません.

于 2013-02-20T21:59:31.690 に答える