Я пытаюсь реорганизовать свое индексное представление, разделяя его между двумя различными представлениями, чтобы сделать его более чистым и читаемым.
Я разделил код, ранее находившийся внутри индекса, на две порции в соответствии с логикой моего контроллера индекса,после чего я попытался поместить внутрь помощника:
мои два индекса представления индекса: _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 %>
в основном то, что я хочу сделать, это делегировать помощнику всю логику, относительно которой частичноесделать и дать индексу только вызов для использования помощника.Конечно, я мог бы добиться всего этого рефакторинга, просто поместив логику моего помощника в указатель и выполнив рендеринг, используя условные две мои части, но я хочу научиться использовать помощников, и тестирование - это единственный известный мне способ обучения.Спасибо за помощь!