我正在尝试重构索引视图,将其分为两个不同的视图,以使其更加清晰易读。
我根据索引控制器的逻辑将先前在索引内的代码分成两个块,然后尝试将其放入助手中:
我的两个索引视图部分是: _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%>
这两个部分都在内部views / 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 %>
基本上,我要做的是将有关哪个局部渲染的所有逻辑委托给助手,并仅将使用助手的调用给予索引。当然,我可以简单地将助手的逻辑放入索引中并使用两个局部条件进行渲染来实现所有这些重构,但是我想学习如何使用助手,而测试是我知道的唯一学习方法。谢谢您的帮助!