首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sinatra和activerecord中的类别树?

sinatra和activerecord中的类别树?
EN

Stack Overflow用户
提问于 2011-07-07 14:45:45
回答 1查看 321关注 0票数 1

我正在尝试使用sinatra和activereord (使用sinatra-activerecord gem)来创建一个在线商店,但是我在想如何生成类别(子类别和其他东西)的“树”时遇到了一些麻烦。

类别数据库只包含类别名称和parent_id,活动记录模型如下所示:

代码语言:javascript
复制
 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 )?

很抱歉问了这么多问题,但我从来没有真正使用过这种类型的数据结构。

EN

回答 1

Stack Overflow用户

发布于 2011-07-09 11:12:07

我想通了。它使用HAML helper,如果存在current_page,还会将current类应用于右侧的元素。这是帮助者

代码语言:javascript
复制
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模板中使用它,如下所示:

代码语言:javascript
复制
#test
    - categories_menu(nil, (@category.id if defined? @category))

不能保证它能与其他任何人的应用程序一起工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6606855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档