PgLtree

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.3 (March 10, 2016)
License Released under the MIT license.

Gem Version Build Status Code Climate RubyDoc

Support

This branch targets Rails 4, 5.0

  • Ruby 2.*
  • Rails >= 4, < 5.1
  • Pg addapter (gem 'pg') >= 0.17, < 0.19

Installation

Add this line to your application's Gemfile:

gem 'pg_ltree', '1.1.3'

And then execute:

$ bundle

Add ltree extension to PostgreSQL:

class AddLtreeExtension < ActiveRecord::Migration
  def change
    enable_extension 'ltree'
  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

Usage

  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: