Gem that allows use ltree
in ActiveRecord models.
It uses a implementation based around PostgreSQL's ltree data type, associated functions and operators.
Author | Andrei Panamarenka |
Version | 1.1.0 (Sep 1, 2015) |
License | Released under the MIT license. |
Add this line to your application's Gemfile:
gem 'pg_ltree'
And then execute:
$ bundle
Add ltree extension to PostgreSQL:
class AddLtreeExtension < ActiveRecord::Migration
def change
reversible do |dir|
dir.up do
execute <<-SQL
CREATE EXTENSION IF NOT EXISTS ltree;
SQL
end
dir.down do
execute <<-SQL
DROP EXTENSION IF NOT EXISTS ltree;
SQL
end
end
end
end
Update your model:
class AnyModel < ActiveRecord::Migration
def change
add_column :any_model, :path, :ltree
add_index :any_model, :path, using: :gist
end
end
Run migrations:
$ bundle exec rake db:migrate
class AnyModel < ActiveRecord::Base
ltree :path
# ltree :path, cascade: false # Disable cascade update and delete
end
root = AnyModel.create!(path: 'Top')
child = AnyModel.create!(path: 'Top.Science')
subchild = AnyModel.create!(path: 'Top.Science.Astronomy')
root.parent # => nil
child.parent # => root
root.children # => [child]
root.children.first.children.first # => subchild
subchild.root # => root
For find a lots of additional information about PgLtee see: