我在视图中有以下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个单独的视图文件中使用它,那么这个代码应该放在哪里?
答案 0 :(得分:0)
如果在同一个控制器上使用它,请查看app/helpers/products_helper.rb
(如果您的控制器名称不同,请用您的控制器名称替换产品)。
如果在多个控制器中使用它,则它属于app/helpers/application_helper.rb
,以便所有视图都可以访问它。
我怀疑您可以显着减少实例变量的使用,并且帮助程序中的代码将更加清晰。我建议在 controller 中而不是在视图或帮助器中加载这些数据。这样,视图只是使用它给出的信息而不是引起重复的api调用。这种急切加载对你的情况可能是不切实际的,但至少这不应该在视图中。