sinatra和activerecord中的分类树?

时间:2011-07-07 06:45:45

标签: ruby activerecord sinatra

我正在尝试使用sinatra和activereord创建一个在线商店(使用sinatra-activerecord gem),并且我在解决如何生成类别的“树”方面遇到了一些麻烦(子类别)和东西)。

类别数据库仅包含类别名称和parent_id,而activrecord模型如下:

 class Category < ActiveRecord::Base
   validates_presence_of :name
   validates_uniqueness_of :name

   has_many :sub_categories, :class_name => 'Category',
     :foreign_key => 'parent_id', :dependent => :destroy
   has_many :products, :dependent => :destroy
   belongs_to :parent_category, :class_name => 'Category'
 end

我如何才能将模板中的东西作为嵌套的ul标签(我正在使用haml,如果它有所不同)?

很抱歉这么多,但我从未真正使用过这些数据结构。

1 个答案:

答案 0 :(得分:0)

我明白了。如果存在current,它将使用HAML帮助程序并将current_page类应用于右侧元素。这是助手

module Haml::Helpers
  def categories_menu(parent=nil, current_page=false)
    categories = Category.where(:parent_id => parent)
    haml_tag :ul do
      categories.each do |category|
        haml_tag :li, :class => ("current" if current_page == category.id) do
          haml_tag :a, :href => "/category/#{category.id}", :class => ("submenu" unless category.sub_categories.empty?) do
            haml_concat(category.name)
          end
          unless category.sub_categories.empty?
            categories_menu(category.id)
          end
        end
      end
    end
  end
end

并在haml模板中使用它,如下所示:

#test
    - categories_menu(nil, (@category.id if defined? @category))

不保证它可以与任何其他人的应用程序一起使用。