ancestryとは
Ruby on Rails ActiveRecordモデルのレコードをツリー構造(または階層)として編成できるようにするGemです。
親、子、孫のような関係を一括で管理する。
使い方
1、Gemfileに記述
gem 'ancestry'
2、下記コマンドを忘れないように。サーバーの再起動も合わせて。
$ bundle install
3、categoryモデルを作る。
$ rails g model category name:string
4、マイグレーションファイルの記述を反映
$ rails db:migrate
5、先ほど作ったcategoriesテーブルにancestryのカラムを作成する
$ rails g migration add_ancestry_to_category ancestry:string:index
6、追記した内容もDBに反映させる
$ rails db:migrate
7、モデルにancestryとアソシエーション を組む
category.rb
class Category < ApplicationRecord
~省略~
has_ancestry
end
データ作成例
seeds.rb
#一階層目
lady = Category.create(name: "レディース")
#二階層目
lady_1 = lady.children.create(name: "トップス")
#三階層目
lady_1.children.create([{:name=>"すべて"}, {:name=>"Tシャツ/カットソー(半袖/袖なし)"},{:name=>"Tシャツ/カットソー(七分/長袖)"}])
データを入れ終わったら、、、
$ rails db:seed
この表のようなデータが作成される。
id | name | ancestry |
---|---|---|
1 | レディース | nil |
2 | トップス | 1 |
3 | すべて | 1/2 |
4 | Tシャツ/カットソー(半袖/袖なし) | 1/2 |
5 | Tシャツ/カットソー(七分/長袖) | 1/2 |
参考文献
https://qiita.com/enjoy_omame/items/eb03ffa1f2a88a297a7e
https://qiita.com/ren0826jam/items/b8819181d56be7b4c403