ECサイトのカテゴリ実装におきまして多重構造での実装が必要となったため
こちらの記事を残させていただきます。
多重構造とはなんぞやとの説明は参照記事をご覧ください。
関連リンク
ancestry導入後起きやすいエラー(解消方)
migrationがうまく動かなくなることがあるので手順を下記に表示いたします
・rake:db:migrate
またはrake:db:migrate:reset
でなぜかエラーが出ませんか?
まず、rake db:reset
を打ちます
rake db:migrate
を打ちます
`rake db:seed'でいけないでしょうか?
時々、途中でエラー分が出ます。
エラー文のなかには ”これを打ち込んで” という一文がわかりやすく記載されているので
そのコマンドを打ち込みます。
さらに'rake db:migrate'これで行けるとはおもうのですが…
もちろんresetをかけることでDBに入っていたデータが全て消えてしまうリスクもございますので
それを念頭に入れて上で、消えても仕方ないといった場合はお試しください。
実装手順
1,Gemのインストール
2,モデルにアソシエーション定義
3,カテゴリの追加
4,ビューへの表示方法(こちらは別記事で書きます)
1,Gemインストール
ancestryのgithub
この手順通り記述します。
gem 'ancestry'
ターミナルでbundle
の実行
bundle
実行後、導入方法は2通りあります。(私の知る限りでは)
もしも、最初からテーブルを作成する場合は以下
$ rails g controller category
$ rails g model category
#ここのcategory部分は作成したいモデル名
今作成されたmigration fileを下記のように記述
class CreateCategories < ActiveRecord::Migration[5.2]
def change
create_table :categories do |t|
t.string :name, null: false
t.string :ancestry
t.timestamps
end
add_index :categories, :ancestry
end
end
$ rake db:migrate
をする。
すでにあるテーブルに追加する場合は以下のコマンドを打ちます。
$ rails g migration add_ancestry_to_[table] ancestry:string:index
#ここの[table]に自分の作成したいテーブル名を記述します。
#そのまま入れてエラーになったw
#今回作りたかったのはカテゴリテーブルなのでcategoryと記述しました
$ rails g migration add_ancestry_to_category ancestry:string:index
$ rake db:migrate
をする。
2,モデルにアソシエーション定義
class Category < ApplicationRecord
has_many :items
has_ancestry
end
#このテーブルはもともと作成済みのものです。
class Item < ApplicationRecord
belongs_to user, foreign_key: 'user_id'
belongs_to :category
end
3,カテゴリの追加
#親要素
lady = Category.create(:name=>"レディース")
#子要素
lady_tops = lady.children.create(:name=>"トップス")
lady_jacket = lady.children.create(:name=>"ジャケット/アウター")
#孫要素(childrenと記述することで直前の変数の子要素として扱うことができる)
lady_tops.children.create([{:name=>"Tシャツ/カットソー(半袖/袖なし)"}, {:name=>"Tシャツ/カットソー(七分/長袖)"},{:name=>"その他"}])
lady_jacket.children.create([{:name=>"テーラードジャケット"}, {:name=>"ノーカラージャケット"}, {:name=>"Gジャン/デニムジャケット"},{:name=>"その他"}])
$ rake db:seed
これでancestryの準備完了です
残るはビューへの記述
こちらは実装途中ですので別記事にて書きます。
記載後はこちらにもリンクを貼ります。
参考記事には多重構造とは?といったし詳細の記載もございますので是非ご参考にしてください。
自身は初学者でございますので記事の内容等に不備等ございましたらご指摘いただけますと幸いです。
また、少しでもお役に立てましたら良いねいただければ喜びます。
どうぞよろしくお願い致します。
参考サイト
Github
ancestryによる多階層構造の実現
多階層カテゴリでancestryを使ったら便利すぎた
ancestryの使い方
[Rails] Ajax通信を用いたカテゴリボックス作成
データベース論理設計のアンチパターン