はじめに
「'食べ物'→'スイーツ'→'モンブラン'のように階層構造を実現したい」
初学者メモです
gem ancestryとは
今回は、「gem ancestry」を使用してみました
【参考にさせていただいたサイト】
手順
- gemインストール
- モデル記述
- seedファイル記述
- データの確認
実装
①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回目です
ご指導、ご教授いただけると幸いです!