ancestryを使用したメルカリのような多段階層構造のカテゴリを実装するためのseed

# ancestryの概要
ancestryはRuby on RailsのActiveRecordモデルのレコードをツリー構造（階層）として編成することを可能にするGemです。

マテリアライズドパスパターンを使用して、単一のデータベース列を使用します。すべての標準ツリー構造関係

【祖先(ancestors)、親(parent)、ルート(root)、子(children)、兄弟(siblings)、子孫(descendants)】

を公開し、それらすべてを単一のSQLクエリで取得できます。

gemの導入に関しては
https://github.com/stefankroes/ancestry
↑を参考にしてください。

##今回やりたいこと
###膨大な内容のカテゴリをseedで作成し、楽にシステム開発をしたい。
ancestryのgemの導入が完了し、これからseeds.rbにカテゴリを追加する記述をしていきますが、そもそもseedて何！？ってなると思います。
##seedとは?
###簡単に言うと初期データのこと
例えば、コーディング中に何らかの理由でデータベースをリセットする場合、中に入っているデータももちろん消えてしまいます。
その際にいちいちデータを入力していくのは2度手間、3度手間になります。

そこで、システムの運用前に初期データ（あらかじめ用意するベースとなるデータ）を記述したり、開発段階で動作確認のために初期データをseeds.rb内に記述しておくことで、たとえデータベースをリセットすることがあっても

```terminal
rake db:seed
```
ですぐにseeds.rb内の内容を呼び出すことができます。

今回はこのseedを作成しています。

##実際にseeds.rbに記述していく（一部抜粋）
seedを記述していくにあたって、以下の3つが必要になります。

1.親カテゴリごとに分ける
2.親カテゴリの中に子カテゴリの配列と孫カテゴリの配列を用意する
3.その配列を使ってeach文で繰り返し処理を行う
※下記内容はレディースのみなので、全てのカテゴリごとに記述が必要です。

```seeds.rb
# レディース
ladies_child_array = ['トップス','ジャケット/アウター','パンツ','スカート','ワンピース','靴','ルームウェア/パジャマ','レッグウェア','帽子','バッグ','アクセサリー','ヘアアクセサリー','小物','時計','ウィッグ/エクステ','浴衣/水着','スーツ/フォーマル/ドレス','マタニティ','その他']
ladies_grandchild_array = [
                            ['Tシャツ/カットソー(半袖/袖なし)','Tシャツ/カットソー(七分/長袖)','シャツ/ブラウス(半袖/袖なし)','シャツ/ブラウス(七分/長袖)','ポロシャツ','キャミソール','タンクトップ','ホルターネック','ニット/セーター','チュニック','カーディガン/ボレロ','アンサンブル','ベスト/ジレ','パーカー','トレーナー/スウェット','ベアトップ/チューブトップ','ジャージ','その他'], 
                            ['テーラードジャケット','ノーカラージャケット','Gジャン/デニムジャケット','レザージャケット','ダウンジャケット','ライダースジャケット','ミリタリージャケット','ダウンベスト','ジャンパー/ブルゾン','ポンチョ','ロングコート','トレンチコート','ダッフルコート','ピーコート','チェスターコート','モッズコート','スタジャン','毛皮/ファーコート','スプリングコート','スカジャン','その他'], 
                            ['デニム/ジーンズ','ショートパンツ','カジュアルパンツ','ハーフパンツ','チノパン','ワークパンツ/カーゴパンツ','クロップドパンツ','サロペット/オーバーオール','オールインワン','サルエルパンツ','ガウチョパンツ','その他'], 
                            ['ミニスカート','ひざ丈スカート','ロングスカート','キュロット','その他'], 
                            ['ミニワンピース','ひざ丈ワンピース','ロングワンピース','その他'], 
                            ['ハイヒール/パンプス','ブーツ','サンダル','スニーカー','ミュール','モカシン','ローファー/革靴','フラットシューズ/バレエシューズ','長靴/レインシューズ','その他'], 
                            ['パジャマ','ルームウェア'], 
                            ['ソックス','スパッツ/レギンス','ストッキング/タイツ','レッグウォーマー','その他'], 
                            ['ニットキャップ/ビーニー','ハット','ハンチング/ベレー帽','キャップ','キャスケット','麦わら帽子','その他'], 
                            ['ハンドバッグ','トートバッグ','エコバッグ','リュック/バックパック','ボストンバッグ','スポーツバッグ','ショルダーバッグ','クラッチバッグ','ポーチ/バニティ','ボディバッグ/ウェストバッグ','マザーズバッグ','メッセンジャーバッグ','ビジネスバッグ','旅行用バッグ/キャリーバッグ','ショップ袋','和装用バッグ','かごバッグ','その他'], 
                            ['ネックレス','ブレスレット','バングル/リストバンド','リング','ピアス(片耳用)','ピアス(両耳用)','イヤリング','アンクレット','ブローチ/コサージュ','チャーム','その他'], 
                            ['ヘアゴム/シュシュ','ヘアバンド/カチューシャ','ヘアピン','その他'], 
                            ['長財布','折り財布','コインケース/小銭入れ','名刺入れ/定期入れ','キーケース','キーホルダー','手袋/アームカバー','ハンカチ','ベルト','マフラー/ショール','ストール/スヌード','バンダナ/スカーフ','ネックウォーマー','サスペンダー','サングラス/メガネ','モバイルケース/カバー','手帳','イヤマフラー','傘','レインコート/ポンチョ','ミラー','タバコグッズ','その他'], 
                            ['腕時計(アナログ)','腕時計(デジタル)','ラバーベルト','レザーベルト','金属ベルト','その他'], 
                            ['前髪ウィッグ','ロングストレート','ロングカール','ショートストレート','ショートカール','その他'], 
                            ['浴衣','着物','振袖','長襦袢/半襦袢','水着セパレート','水着ワンピース','水着スポーツ用','その他'], 
                            ['スカートスーツ上下','パンツスーツ上下','ドレス','パーティーバッグ','シューズ','ウェディング','その他'], 
                            ['トップス','アウター','インナー','ワンピース','パンツ/スパッツ','スカート','パジャマ','授乳服','その他'], 
                            ['コスプレ','下着','その他']
                          ]
parent = Category.create(name: 'レディース')
ladies_child_array.each_with_index do |child, i|
  child = parent.children.create(name: child)
  ladies_grandchild_array[i].each do |grandchild|
    child.children.create(name: grandchild)
  end
end
```

##ポイント
子カテゴリはそのまま記述していきますが、孫カテゴリは、
###子カテゴリを配列[ ]に置き換えてその中に孫カテゴリをいれてあげるイメージで記述していきます。

```seeds.rb
ladies_child_array = ['トップス', 'ジャケット/アウター']
```

と子カテゴリがあるなら

```seeds.rb
ladies_grandchild_array = [['Tシャツ/カットソー(半袖/袖なし)','Tシャツ/カットソー(七分/長袖)'],['テーラードジャケット','ノーカラージャケット']]
```
というように子カテゴリに孫カテゴリを配列[ ]としていれてあげます。

また、私の場合視覚的にわかりやすくするために、

```seeds.rb
ladies_grandchild_array = [
                           ['Tシャツ/カットソー(半袖/袖なし)','Tシャツ/カットソー(七分/長袖)'],
                           ['テーラードジャケット','ノーカラージャケット']
                          ]
```

というように一つずつ改行をして管理をしやすくしています。
一行ずつに子要素をコメントアウトをしてあげるとより良いかもしれませんね！
##※注意点
子カテゴリ、孫カテゴリの配列を代入している変数は、もちろん各親カテゴリにする必要があります。

メンズカテゴリでは

```seeds.rb
mens_child_array = [ ]
mens_grandchild_array = [[ ]]
```
などを使用しましょう。

あとは、
下記のように親カテゴリをcreateして、記述した配列を用いて子カテゴリ、孫カテゴリを順番にcreateしていけばOKです！！

```seeds.rb
parent = Category.create(name: 'レディース')
ladies_child_array.each_with_index do |child, i|
  child = parent.children.create(name: child)
  ladies_grandchild_array[i].each do |grandchild|
    child.children.create(name: grandchild)
  end
end
```

※今回のancestryで使用するメソッドに関しては、
https://github.com/stefankroes/ancestry
↑を参考にしてください。