Дерево категорий в синатре и activerecord? - PullRequest
1 голос
/ 07 июля 2011

Я пытаюсь создать интернет-магазин, используя sinatra и activereord (используя драгоценный камень sinatra-activerecord), и у меня возникают небольшие проблемы, когда я пытаюсь понять, как создать «дерево» категорий (подкатегорий и прочее) ).

База данных категорий содержит только имя категории и 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 голосов
/ 09 июля 2011

Я понял это.Он использует помощник HAML, а также применяет класс current к нужному элементу, если существует 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))

Нет гарантий, что он будет работать с приложениями других пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...