我正在开发一个必须在主页上显示产品列表的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代码,我怎么能这样做呢。
对于如何实现这一点有什么想法吗?
答案 0 :(得分:1)
下面的一些用于优化,其他用于清理。
Eager-load your associations减少数据库查询次数。
@products = Product.includes(:category).all
@products.each do |product|
puts product.category.name
end
创建三列布局模板。除了.col-main
中的内容之外,其中包含视图模板中的所有内容,并在yield
内的布局模板中移动.col-main
。从视图模板中删除特定于布局的HAML。
使用image_tag
和link_to
查看助手。这可能比自己定义标记要慢,但是再次HAML is known to be slower than ERB。
%a{:href => '/hyperlink/url'}
= "hyperlink text"
= link_to 'hyperlink text', '/hyperlink/url'
Take advantage of path generation helpers.
= category_path(:id => @category.id)
= category_path(@category)
将产品表格单元格的标记和代码移动到视图部分。