我正在尝试使用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,如果它有所不同)?
很抱歉这么多,但我从未真正使用过这些数据结构。
答案 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))
不保证它可以与任何其他人的应用程序一起使用。