1

ホームページに製品のリストを表示する必要がある 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 コードを書かずにどうすればよいのかわかりません。

どうすればこれを達成できるかについて何か考えはありますか?

4

1 に答える 1

1

以下のいくつかは最適化用で、他はクリーンアップ用です。

  1. アソシエーションを積極的にロードして、DB クエリの数を減らします。

    @products = Product.includes(:category).all
    @products.each do |product|
      puts product.category.name
    end
    
  2. 3 列のレイアウト テンプレートを作成します。内のものを除くビュー テンプレートのすべてをこれに含め、レイアウト テンプレートを 内に.col-main移動します。ビュー テンプレートからレイアウト固有の HAML を削除します。yield.col-main

  3. ヘルパーを使用image_tagおよび表示します。link_toこれは、タグを自分で定義するよりも遅い可能性がありますが、HAML は ERB よりも遅いことが知られています

    %a{:href => '/hyperlink/url'}
      = "hyperlink text"
    
    = link_to 'hyperlink text', '/hyperlink/url'
    
  4. パス生成ヘルパーを活用します。

    = category_path(:id => @category.id)
    = category_path(@category)
    
  5. 製品テーブル セルのマークアップとコードをビュー パーシャルに移動します。

于 2013-10-29T18:00:56.847 に答える