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 调用。这种急切加载对于您的情况可能不切实际,但至少这不应该出现在视图中。

于 2013-02-20T21:59:31.690 回答