しまもん 

モンスターラボ島根開発拠点のブログ

【今日のgem】ツリー構造を扱うときは、「ancestry」が便利です

ぐっち ・2015-06-10

ancestryとは

stefankroes/ancestry

Organise ActiveRecord model into a tree structure

ActiveRecordモデルで階層(ツリー)構造を扱うことができるgemです。

インストール

# Gemfile
gem 'ancestry'

# データベースに階層構造を記述するためのカラムとインデックスを追加します

# migrateファイル作成
rails g migration add_ancestry_to_[table] ancestry:string

# インデックスの追加を記載
add_index [table], :ancestry

# migrate実行
rake db:migrate

# modelクラスに設定追加
# app/models/[model].rb
has_ancestry

以下のようなメソッドで、 ancestors, parent, root, children, siblings, descendantsといった、 ツリー構造の標準的な関連データにアクセスできます。

parent:    親ノードのレコードを返す
root:        ルートノードのレコードを返す
children: 子ノードのレコードを返す
depth:     階層の深さを数値で返す
など

ちなみに、データベースのカラムには以下のようにパスが保存されます

| id | ancestry |
| -- | ---------- |
|  6 | NULL     |
|  7 | 6            |
|  8 | 6/7         |

| 採用情報

城下町・松江で一旗揚げたいRailsエンジニア絶賛募集中!

Blue