Рефакторинг моего кода представления индекса с помощью помощника - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь реорганизовать свое индексное представление, разделяя его между двумя различными представлениями, чтобы сделать его более чистым и читаемым.

Я разделил код, ранее находившийся внутри индекса, на две порции в соответствии с логикой моего контроллера индекса,после чего я попытался поместить внутрь помощника:

мои два индекса представления индекса: _search_results_products.html.erb

  <% if @products.present? %>
    <% @products.each do |product| %>
      <% if product.ordinable == true  %>
      <div>
        <%= product.picture? ? image_tag(product.picture_url, :alt => product.name) : image_tag("https://via.placeholder.com/250x250") %>
        <%= product.name %><br>
        <%= product.description %><br>
        <%= humanized_money_with_symbol(product.price)%><br>
        <%= link_to "Show Product", product_path(product) %>
      </div>
      <% else %>
        <h1>No products found!</h1>
      <% end %>
    <%end%>
<%= will_paginate @products%>
  <% else %>
  <h1>No products found!</h1>
  <% end %>

_all_products.html.erb

<% @products.each do |product| %>
  <% if product.ordinable == true  %>
    <div>
      <%= product.picture? ? image_tag(product.picture_url, :alt => product.name) : image_tag("https://via.placeholder.com/250x250") %>
      <%= product.name %><br>
      <%= product.description %><br>
      <%= humanized_money_with_symbol(product.price)%><br>
      <%= link_to "Show Product", product_path(product) %>
    </div>
  <% else %>
    <h1>No products found!</h1>
  <% end %>
  <% end %>
<%= will_paginate @products%>

обе эти части являются внутренними представлениями / products / index_partials

После того, как я создал метод внутри помощника продукта с именем index_methods_partial, который выглядит следующим образом:

module ProductsHelper

  def index_methods_partial
    if params[:term].present?
      @products = Product.where(:ordinable => true).order('created_at DESC').search_by_name_and_description(params[:term]).paginate page: params[:page], per_page: 7
      'views/products/index_partials/search_results_products'
    else
      @products = Product.where(:ordinable => true).order('created_at DESC').paginate page: params[:page], per_page: 7
      'views/products/index_partials/all_products'
    end
  end
end

это был код, который былранее в моем контроллере индекса продукта.который теперь выглядит следующим образом: пусто

  def index
    index_methods_partial
  end

Затем в моем фактическом index.html.erb я попытался отобразить помощника:

<% provide(:title, "Products") %>
<%= render index_methods_partial %>

, когда я иду к индексу, я получаюэто ошибки:

Missing partial views/products/index_partials/_search_results_products with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :coffee, :jbuilder]}. Searched in:
  * "/home/lusa/code/pula/development/myapp/app/views"
  * "/home/lusa/.rbenv/versions/2.4.4/lib/ruby/gems/2.4.0/gems/devise-4.5.0/app/views"

и красная ошибка в этой строке внутри индекса:

<%= render index_methods_partial %>

в основном то, что я хочу сделать, это делегировать помощнику всю логику, относительно которой частичноесделать и дать индексу только вызов для использования помощника.Конечно, я мог бы добиться всего этого рефакторинга, просто поместив логику моего помощника в указатель и выполнив рендеринг, используя условные две мои части, но я хочу научиться использовать помощников, и тестирование - это единственный известный мне способ обучения.Спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...