Skip to content

Instantly share code, notes, and snippets.

@deep-spaced
Created February 11, 2016 03:58
Show Gist options
  • Save deep-spaced/3b21414ca72f1c46d743 to your computer and use it in GitHub Desktop.
Save deep-spaced/3b21414ca72f1c46d743 to your computer and use it in GitHub Desktop.
A tree generator for navigation.
module TreeGenerator
def self.generate_tree
pages = all.select('id, name, depth, parent_id, sort_order').order('sort_order ASC')
ordered_pages = ActiveSupport::OrderedHash.new
pages.each do |page|
ordered_pages[page.id] = {page: page, children: generate_children(page.id, pages)} if page.depth == 0
end
ordered_pages
end
protected
def self.generate_children(parent_id, pages)
children = ActiveSupport::OrderedHash.new
pages.each do |page|
if page.parent_id == parent_id
children[page.id] = {page: page, children: generate_children(page.id, pages)}
end
end
children
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment