0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

初学者メモ 「gem ancestry」で多階層データを作る

Last updated at Posted at 2023-06-01

はじめに

「'食べ物'→'スイーツ'→'モンブラン'のように階層構造を実現したい」
初学者メモです

gem ancestryとは

今回は、「gem ancestry」を使用してみました

【参考にさせていただいたサイト】

手順

  1. gemインストール
  2. モデル記述
  3. seedファイル記述
  4. データの確認

実装

①gemインストール

Gemfile
gem 'ancestry'

bundle install を忘れずに

②Genreモデル作成

rails g model Genre

マイグレーションファイルに記述

XXX_create_genres.rb
...省略
t.string :name, null: false
t.string :ancestry
...省略

【メモ】ancestryカラムを追加するようです
rails db:migrateを忘れずに

③モデル記述

genre.rb
has_ancestry

この記述が大事

④seedファイルの記述

seeds.rb
leader = Genre.create(name: '指導者')
elementary_school, junior_high_school, high_school, sports_coach = leader.children.create(
  [
    { name: '小学校' },
    { name: '中学校' },
    { name: '高等学校' },
    { name: 'スポーツコーチ' }
  ]
)

['(小)国語', '(小)算数', '(小)理科', '(小)社会', '(小)体育', '(小)音楽'].each do |name|
  elementary_school.children.create(name: name)
end

['(中)国語', '(中)数学', '(中)理科'].each do |name|
  junior_high_school.children.create(name: name)
end

['(高)国語', '(高)数学', '(高)物理'].each do |name|
  high_school.children.create(name: name)
end

['野球', 'サッカー', 'バスケットボール', '武道'].each do |name|
  sports_coach.children.create(name: name)
end

Rails db:seedを忘れずに

⑤確認

「Rails c」で「Genre.find(XX)」でデータが入っていることを確認できました!

補足

seedファイルの記述を変更したかったのですが、

rails db:seed

だけでは上書きされ続けてしまい、

rails db:seed:reset

だと、そんなコマンドないよと怒られました…
結局、

rails db:migrate:reset
rails db:seed

で解決!

まとめ

  • ancestryのgemで簡単に階層構造が実現

投稿3回目です
ご指導、ご教授いただけると幸いです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?