如何为使用HAML的视图创建帮助器?

时间:2013-10-29 17:18:12

标签: ruby-on-rails haml

我正在开发一个必须在主页上显示产品列表的Web应用程序。 为此,我有一个ProductsController:

     class ProductsController < ApplicationController
       include ProductsHelper
       def index
        @products = Product.last(6).reverse
       end
     end  

和相应的视图index.haml:

    .main-container.col3-layout
      .main
        .col-wrapper
           .col-main
            .box.best-selling
              %h3 Latest Products
              %table{:border => "0", :cellspacing => "0"}
                %tbody
                  - @products.each_slice(2) do |slice|
                    %tr
                      - slice.each do |product|
                        %td
                          %a{:href => product_path(:id => product.id)}
                            = product.title
                            %img.product-img{:alt => "", :src => product.image.path + product.image.filename, :width => "95"}/
                          .product-description
                            %p
                              %a{:href => "#"}
                            %p
                              See all from
                              %a{:href => category_path(:id => product.category.id)}
                                = product.category.label
        =render "layouts/sidebar_left"
        =render "layouts/sidebar_right"

为了提高效率,我想使用帮助器,但我不知道如果不在products_helper.rb文件中编写HAML代码,我怎么能这样做呢。

对于如何实现这一点有什么想法吗?

1 个答案:

答案 0 :(得分:1)

下面的一些用于优化,其他用于清理。

  1. Eager-load your associations减少数据库查询次数。

    @products = Product.includes(:category).all
    @products.each do |product|
      puts product.category.name
    end
    
  2. 创建三列布局模板。除了.col-main中的内容之外,其中包含视图模板中的所有内容,并在yield内的布局模板中移动.col-main。从视图模板中删除特定于布局的HAML。

  3. 使用image_taglink_to查看助手。这可能比自己定义标记要慢,但是再次HAML is known to be slower than ERB

    %a{:href => '/hyperlink/url'}
      = "hyperlink text"
    
    = link_to 'hyperlink text', '/hyperlink/url'
    
  4. Take advantage of path generation helpers.

    = category_path(:id => @category.id)
    = category_path(@category)
    
  5. 将产品表格单元格的标记和代码移动到视图部分。