Module | Sequel::Plugins::Tree |
In: |
lib/sequel/plugins/tree.rb
|
The Tree plugin adds additional associations and methods that allow you to treat a Model as a tree.
A column for holding the parent key is required and is :parent_id by default. This may be overridden by passing column name via :key
Optionally, a column to control order of nodes returned can be specified by passing column name via :order.
Examples:
class Node < Sequel::Model plugin :tree end class Node < Sequel::Model plugin :tree, :key=>:parentid, :order=>:position end
Create parent and children associations. Any options specified are passed to both associations. You can specify options to use for the parent association using a :parent option, and options to use for the children association using a :children option.
# File lib/sequel/plugins/tree.rb, line 27 27: def self.apply(model, opts={}) 28: opts = opts.dup 29: opts[:class] = model 30: 31: model.instance_eval do 32: @parent_column = (opts[:key] ||= :parent_id) 33: @tree_order = opts[:order] 34: end 35: 36: par = opts.merge(opts.fetch(:parent, {})) 37: parent = par.fetch(:name, :parent) 38: model.many_to_one parent, par 39: 40: chi = opts.merge(opts.fetch(:children, {})) 41: children = chi.fetch(:name, :children) 42: model.one_to_many children, chi 43: end