使用助手重构索引视图代码

时间:2018-10-13 14:05:21

标签: ruby-on-rails ruby

我正在尝试重构索引视图,将其分为两个不同的视图,以使其更加清晰易读。

我根据索引控制器的逻辑将先前在索引内的代码分成两个块,然后尝试将其放入助手中:

我的两个索引视图部分是: _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 %>

基本上,我要做的是将有关哪个局部渲染的所有逻辑委托给助手,并仅将使用助手的调用给予索引。当然,我可以简单地将助手的逻辑放入索引中并使用两个局部条件进行渲染来实现所有这些重构,但是我想学习如何使用助手,而测试是我知道的唯一学习方法。谢谢您的帮助!

0 个答案:

没有答案