Rails助手在视图中

时间:2013-02-20 21:49:09

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

我在视图中有以下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个单独的视图文件中使用它,那么这个代码应该放在哪里?

1 个答案:

答案 0 :(得分:0)

如果在同一个控制器上使用它,请查看app/helpers/products_helper.rb(如果您的控制器名称不同,请用您的控制器名称替换产品)。

如果在多个控制器中使用它,则它属于app/helpers/application_helper.rb,以便所有视图都可以访问它。

我怀疑您可以显着减少实例变量的使用,并且帮助程序中的代码将更加清晰。我建议在 controller 中而不是在视图或帮助器中加载这些数据。这样,视图只是使用它给出的信息而不是引起重复的api调用。这种急切加载对你的情况可能是不切实际的,但至少这不应该在视图中。