negos_app/app/models/need_category.rb
2016-02-16 21:09:48 +01:00

57 lines
1.3 KiB
Ruby
Executable File

class NeedCategory < ActiveRecord::Base
attr_accessor :level
scope :top, -> {
where(parent_id: nil)
}
belongs_to :parent, class_name: "NeedCategory", foreign_key: :parent_id
has_many :categories, class_name: "NeedCategory", foreign_key: :parent_id, dependent: :destroy
validates :name, :presence => true, length: {within: 1..64}
def level=(level)
@level = level
end
def ancestors
node, ancestors = self, []
ancestors << node = NeedCategory.find(node.parent_id) while node.parent_id?
ancestors
end
def self.create_tree
collection = []
level = 0
top_level_categories = NeedCategory.order(name: :asc).top
self.populate_collection(collection, top_level_categories, level)
collection
end
def self.populate_collection(collection, categories, level)
categories.each do |c|
c.level = level
childs = c.categories.order(name: :asc)
collection << c
self.populate_collection(collection, childs, level + 1)
end
end
def self.populate_ids(ids, categories)
categories.each do |c|
ids << c.id
childs = c.categories
self.populate_ids(ids,childs)
end
end
def child_ids
ids = []
ids << self.id
NeedCategory.populate_ids(ids, self.categories)
ids
end
end