Rails помощник в поле зрения
У меня есть следующий вызов 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 ответ
Если это используется на том же контроллере, посмотрите в app/helpers/products_helper.rb
(если ваш контроллер назван как-то по-другому, замените продукты именем вашего контроллера).
Если это используется на многих контроллерах, оно принадлежит app/helpers/application_helper.rb
так что все виды имеют доступ к нему.
Я подозреваю, что вы могли бы значительно сократить использование переменных экземпляра, и код будет значительно чище в помощнике. Я бы предложил загрузить эти данные в контроллер, а не в представление или помощников. Таким образом, представление просто использует информацию, которую ему дают, а не вызывает повторные вызовы API. Такая энергичная загрузка может быть непрактичной для вашей ситуации, но, по крайней мере, этого не должно быть в поле зрения.