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. Такая энергичная загрузка может быть непрактичной для вашей ситуации, но, по крайней мере, этого не должно быть в поле зрения.

Другие вопросы по тегам