LoginSignup
0
0

More than 1 year has passed since last update.

【Rails】ancestryを用いてエリアの登録(多階層、親-子)を行う

Posted at

はじめに

ancestryを用いてエリアの登録(親、子)を行ったので、まとめておきます。

手順

  1. Gemfileに記述する
Gemfile
gem 'ancestry'
ターミナル
$ bundle install

2.モデルの作成

ターミナル
rails g model Region name:string ancestry:string

作成したマイグレーションファイルを開き、nameにnull: falseを指定する

ターミナル
rails db:migrate

3.モデルの記述

region.rb
has_ancestry

4.seedの作成

db/seeds.rb
#親のレコードを作成
hokkaido, tohoku, kanto, chubu, kinki, chugoku, shikoku, kyushu  = Region.create(
  [
    { name: '北海道地方' },
    { name: '東北地方' },
    { name: '関東地方' },
    { name: '中部地方' },
    { name: '近畿地方' },
    { name: '中国地方' },
    { name: '四国地方' },
    { name: '九州地方' }
  ]
)
#子のレコードを作成
['北海道'].each do |name|
  hokkaido.children.create(name: name)
end

['青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県'].each do |name|
  tohoku.children.create(name: name)
end

['東京都', '茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '神奈川県'].each do |name|
  kanto.children.create(name: name)
end

['新潟県', '富山県', '石川県', '福井県', '山梨県', '長野県', '岐阜県', '静岡県', '愛知県'].each do |name|
  chubu.children.create(name: name)
end

['京都府', '大阪府', '三重県', '滋賀県', '兵庫県', '奈良県', '和歌山県'].each do |name|
  kinki.children.create(name: name)
end

['鳥取県', '島根県', '岡山県', '広島県', '山口県'].each do |name|
  chugoku.children.create(name: name)
end

['徳島県', '香川県', '愛媛県', '高知県'].each do |name|
  shikoku.children.create(name: name)
end

['福岡県', '佐賀県', '長崎県', '大分県', '熊本県', '宮崎県', '鹿児島県', '沖縄県'].each do |name|
  kyushu.children.create(name: name)
end

5.seedを読み込みなおし、コンソールでデータが入っていることを確認

ターミナル
$rails db:migrate:reset
$rails db:seed
ターミナル
$rails c
 > Region.all #全レコードを確認(数が多く、最後に[...]と表記があればOK)
 > Region.count #全レコード数を確認
 > Region.last #レコードの最後がseedの最後のデータであれば問題なく登録できている

他にも確認方法はあると思いますが、私はこれらで確認をしました。

終わりに

ancestryを用いてデータの登録までできました。
ここからコントローラーやビューの定義をし、機能を実装していきます。
出来次第まとめます。

参考

0
0
1

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