다계층 카테고리에서 ancestry를 사용하면 너무 편리했습니다.
10203 단어 젬루비RailsActiveRecord
결국은 ancestry라는 gem을 사용하여 잘 갔다 (아마)라는 이야기입니다.
완성 이미지
(일부이지만,,,)
・부모 카테고리/자 카테고리/손 카테고리가 있어, 카테고리끼리 3층의 관계성이 되어 있다.
・각각의 카테고리에 아이템이 들어가 있어, 카테고리 나누어 아이템 검색할 수 있다.
①DB 설계
당초, 아이템과 카테고리는 다대다가 되기 때문에 중간 테이블 만들고, 카테고리는 세분화해 넣으면 좋겠다.
라고 생각했습니다,,,
↓당초의 ER도
막상 진행해 보면, 친자손의 관계성 없지? 되어 변경.
다계층 카테고리 관리는 여러 가지 방법이 있는 것 같지만 호출이 간단합니다.
Path Enumeration(경로 열거형)으로 DB를 작성하기로 했습니다.
경로를 컬럼에서 관리하고 경로(Path) 기준으로 표시합시다는 느낌입니다(모호합니다만)
↓이런 느낌
id
path
item
1
null
여성
2
1
탑스
3
1/2
티셔츠
htps : // 카바타안. 하테나 bぉg. 코m/엔트리/2016/12/19/193430
(참고하신 기사입니다)
②도입
htps : // 기주 b. 코 m / s 테후 켄 k 로에 s / 안세 스트리
↑에 따르면 OK입니다!
Gemfile
gem 'ancestry'
$ bundle install
$ rails g migration add_ancestry_to_[table] ancestry:string:index
$ rake db:migrate
class Category < ApplicationRecord
has_many :item_categories
has_many :items, through: :item_categories
has_ancestry
end
#カテゴリーモデルにアンセストリーを使うよ、って書いておく
준비 완료!
↓(ancestory를 사용하면 다대다가 아니라 일대다로 좋을 것 같습니다)
class Item < ApplicationRecord
belongs_to user, foreign_key: 'user_id'
belongs_to :category
#(中略
end
class Category < ApplicationRecord
has_many :items
has_ancestry
end
③레코드 투입!
seeds.rb
lady = Category.create(:name=>"レディース")
lady_tops = lady.children.create(:name=>"トップス")
lady_jacket = lady.children.create(:name=>"ジャケット/アウター")
lady_tops.children.create([{:name=>"Tシャツ/カットソー(半袖/袖なし)"}, {:name=>"Tシャツ/カットソー(七分/長袖)"},{:name=>"その他"}])
lady_jacket.children.create([{:name=>"テーラードジャケット"}, {:name=>"ノーカラージャケット"}, {:name=>"Gジャン/デニムジャケット"},{:name=>"その他"}])
ancestry를 넣으면 children이라고 기술하는 것으로 직전의 변수의 아이 요소로서 취급할 수 있습니다!
그래서 레이디스(부모) 탑스(아이) T셔츠(손자)라는 관계성을 레코드 작성시에 Gem이 해 주는 것입니다!
$ rake db:seed
1 レディース NULL
2 メンズ NULL
:
13 その他 NULL
14 トップス 1
15 ジャケット/アウター 1
:
19 その他 1
20 Tシャツ/カットソー(半袖/袖なし) 1/14
21 Tシャツ/カットソー(七分/長袖) 1/14
22 シャツ/ブラウス(半袖/袖なし) 1/14
23 シャツ/ブラウス(七分/長袖) 1/14
:
레코드 투입 완료!
④View로 표시
컨트롤러
def index
@parents = Category.all.order("id ASC").limit(13)
end
#1層目が13個なのでlimit(13)
뷰 부모 요소
- @parents.each do |parent|
=parent.name
↓
*CSS는 별도로 적용됩니다
자식 요소
:
- parent.children.each do |child|
=child.name
손자 요소
:
- child.children.each do |grandchild|
=grandchild.name
#ちなみに、=grandchild.parent.nameとするとgrandchildrenの親要素を取得できます!
⑤결론
너무 편리합니다.
전화가 간단하고 좋네요.
아이로부터 부모도 부를 수 있으므로, 여러가지 사용법을 할 수 있을지도?
아직 ancestry에 관한 Qiita의 기사는 적게 느껴지기 때문에,
가능하면 Github의 ReadMe를 참조해야 할 것이라고 생각합니다.
잘못된 점, 개선점 등 있으면 댓글을 주시면 감사하겠습니다
참고로 한 기사
h tps://카바타안. 하테나 bぉg. 코m/엔트리/2016/12/19/193430
htps : /// ch 라쵸. bp 신 c. jp/바다/2018_03_15/53872
htps : // 이 m / 나카 _ 아키 히토 / ms / d42 A 6 Sea 40933 A f2352
htps : // 기주 b. 코 m / s 테후 켄 k 로에 s / 안세 스트리
Reference
이 문제에 관하여(다계층 카테고리에서 ancestry를 사용하면 너무 편리했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Sotq_17/items/120256209993fb05ebac
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
당초, 아이템과 카테고리는 다대다가 되기 때문에 중간 테이블 만들고, 카테고리는 세분화해 넣으면 좋겠다.
라고 생각했습니다,,,
↓당초의 ER도
막상 진행해 보면, 친자손의 관계성 없지? 되어 변경.
다계층 카테고리 관리는 여러 가지 방법이 있는 것 같지만 호출이 간단합니다.
Path Enumeration(경로 열거형)으로 DB를 작성하기로 했습니다.
경로를 컬럼에서 관리하고 경로(Path) 기준으로 표시합시다는 느낌입니다(모호합니다만)
↓이런 느낌
id
path
item
1
null
여성
2
1
탑스
3
1/2
티셔츠
htps : // 카바타안. 하테나 bぉg. 코m/엔트리/2016/12/19/193430
(참고하신 기사입니다)
②도입
htps : // 기주 b. 코 m / s 테후 켄 k 로에 s / 안세 스트리
↑에 따르면 OK입니다!
Gemfile
gem 'ancestry'
$ bundle install
$ rails g migration add_ancestry_to_[table] ancestry:string:index
$ rake db:migrate
class Category < ApplicationRecord
has_many :item_categories
has_many :items, through: :item_categories
has_ancestry
end
#カテゴリーモデルにアンセストリーを使うよ、って書いておく
준비 완료!
↓(ancestory를 사용하면 다대다가 아니라 일대다로 좋을 것 같습니다)
class Item < ApplicationRecord
belongs_to user, foreign_key: 'user_id'
belongs_to :category
#(中略
end
class Category < ApplicationRecord
has_many :items
has_ancestry
end
③레코드 투입!
seeds.rb
lady = Category.create(:name=>"レディース")
lady_tops = lady.children.create(:name=>"トップス")
lady_jacket = lady.children.create(:name=>"ジャケット/アウター")
lady_tops.children.create([{:name=>"Tシャツ/カットソー(半袖/袖なし)"}, {:name=>"Tシャツ/カットソー(七分/長袖)"},{:name=>"その他"}])
lady_jacket.children.create([{:name=>"テーラードジャケット"}, {:name=>"ノーカラージャケット"}, {:name=>"Gジャン/デニムジャケット"},{:name=>"その他"}])
ancestry를 넣으면 children이라고 기술하는 것으로 직전의 변수의 아이 요소로서 취급할 수 있습니다!
그래서 레이디스(부모) 탑스(아이) T셔츠(손자)라는 관계성을 레코드 작성시에 Gem이 해 주는 것입니다!
$ rake db:seed
1 レディース NULL
2 メンズ NULL
:
13 その他 NULL
14 トップス 1
15 ジャケット/アウター 1
:
19 その他 1
20 Tシャツ/カットソー(半袖/袖なし) 1/14
21 Tシャツ/カットソー(七分/長袖) 1/14
22 シャツ/ブラウス(半袖/袖なし) 1/14
23 シャツ/ブラウス(七分/長袖) 1/14
:
레코드 투입 완료!
④View로 표시
컨트롤러
def index
@parents = Category.all.order("id ASC").limit(13)
end
#1層目が13個なのでlimit(13)
뷰 부모 요소
- @parents.each do |parent|
=parent.name
↓
*CSS는 별도로 적용됩니다
자식 요소
:
- parent.children.each do |child|
=child.name
손자 요소
:
- child.children.each do |grandchild|
=grandchild.name
#ちなみに、=grandchild.parent.nameとするとgrandchildrenの親要素を取得できます!
⑤결론
너무 편리합니다.
전화가 간단하고 좋네요.
아이로부터 부모도 부를 수 있으므로, 여러가지 사용법을 할 수 있을지도?
아직 ancestry에 관한 Qiita의 기사는 적게 느껴지기 때문에,
가능하면 Github의 ReadMe를 참조해야 할 것이라고 생각합니다.
잘못된 점, 개선점 등 있으면 댓글을 주시면 감사하겠습니다
참고로 한 기사
h tps://카바타안. 하테나 bぉg. 코m/엔트리/2016/12/19/193430
htps : /// ch 라쵸. bp 신 c. jp/바다/2018_03_15/53872
htps : // 이 m / 나카 _ 아키 히토 / ms / d42 A 6 Sea 40933 A f2352
htps : // 기주 b. 코 m / s 테후 켄 k 로에 s / 안세 스트리
Reference
이 문제에 관하여(다계층 카테고리에서 ancestry를 사용하면 너무 편리했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Sotq_17/items/120256209993fb05ebac
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
gem 'ancestry'
$ bundle install
$ rails g migration add_ancestry_to_[table] ancestry:string:index
$ rake db:migrate
class Category < ApplicationRecord
has_many :item_categories
has_many :items, through: :item_categories
has_ancestry
end
#カテゴリーモデルにアンセストリーを使うよ、って書いておく
class Item < ApplicationRecord
belongs_to user, foreign_key: 'user_id'
belongs_to :category
#(中略
end
class Category < ApplicationRecord
has_many :items
has_ancestry
end
seeds.rb
lady = Category.create(:name=>"レディース")
lady_tops = lady.children.create(:name=>"トップス")
lady_jacket = lady.children.create(:name=>"ジャケット/アウター")
lady_tops.children.create([{:name=>"Tシャツ/カットソー(半袖/袖なし)"}, {:name=>"Tシャツ/カットソー(七分/長袖)"},{:name=>"その他"}])
lady_jacket.children.create([{:name=>"テーラードジャケット"}, {:name=>"ノーカラージャケット"}, {:name=>"Gジャン/デニムジャケット"},{:name=>"その他"}])
ancestry를 넣으면 children이라고 기술하는 것으로 직전의 변수의 아이 요소로서 취급할 수 있습니다!
그래서 레이디스(부모) 탑스(아이) T셔츠(손자)라는 관계성을 레코드 작성시에 Gem이 해 주는 것입니다!
$ rake db:seed
1 レディース NULL
2 メンズ NULL
:
13 その他 NULL
14 トップス 1
15 ジャケット/アウター 1
:
19 その他 1
20 Tシャツ/カットソー(半袖/袖なし) 1/14
21 Tシャツ/カットソー(七分/長袖) 1/14
22 シャツ/ブラウス(半袖/袖なし) 1/14
23 シャツ/ブラウス(七分/長袖) 1/14
:
레코드 투입 완료!
④View로 표시
컨트롤러
def index
@parents = Category.all.order("id ASC").limit(13)
end
#1層目が13個なのでlimit(13)
뷰 부모 요소
- @parents.each do |parent|
=parent.name
↓
*CSS는 별도로 적용됩니다
자식 요소
:
- parent.children.each do |child|
=child.name
손자 요소
:
- child.children.each do |grandchild|
=grandchild.name
#ちなみに、=grandchild.parent.nameとするとgrandchildrenの親要素を取得できます!
⑤결론
너무 편리합니다.
전화가 간단하고 좋네요.
아이로부터 부모도 부를 수 있으므로, 여러가지 사용법을 할 수 있을지도?
아직 ancestry에 관한 Qiita의 기사는 적게 느껴지기 때문에,
가능하면 Github의 ReadMe를 참조해야 할 것이라고 생각합니다.
잘못된 점, 개선점 등 있으면 댓글을 주시면 감사하겠습니다
참고로 한 기사
h tps://카바타안. 하테나 bぉg. 코m/엔트리/2016/12/19/193430
htps : /// ch 라쵸. bp 신 c. jp/바다/2018_03_15/53872
htps : // 이 m / 나카 _ 아키 히토 / ms / d42 A 6 Sea 40933 A f2352
htps : // 기주 b. 코 m / s 테후 켄 k 로에 s / 안세 스트리
Reference
이 문제에 관하여(다계층 카테고리에서 ancestry를 사용하면 너무 편리했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Sotq_17/items/120256209993fb05ebac
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def index
@parents = Category.all.order("id ASC").limit(13)
end
#1層目が13個なのでlimit(13)
- @parents.each do |parent|
=parent.name
:
- parent.children.each do |child|
=child.name
:
- child.children.each do |grandchild|
=grandchild.name
#ちなみに、=grandchild.parent.nameとするとgrandchildrenの親要素を取得できます!
너무 편리합니다.
전화가 간단하고 좋네요.
아이로부터 부모도 부를 수 있으므로, 여러가지 사용법을 할 수 있을지도?
아직 ancestry에 관한 Qiita의 기사는 적게 느껴지기 때문에,
가능하면 Github의 ReadMe를 참조해야 할 것이라고 생각합니다.
잘못된 점, 개선점 등 있으면 댓글을 주시면 감사하겠습니다
참고로 한 기사
h tps://카바타안. 하테나 bぉg. 코m/엔트리/2016/12/19/193430
htps : /// ch 라쵸. bp 신 c. jp/바다/2018_03_15/53872
htps : // 이 m / 나카 _ 아키 히토 / ms / d42 A 6 Sea 40933 A f2352
htps : // 기주 b. 코 m / s 테후 켄 k 로에 s / 안세 스트리
Reference
이 문제에 관하여(다계층 카테고리에서 ancestry를 사용하면 너무 편리했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Sotq_17/items/120256209993fb05ebac
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(다계층 카테고리에서 ancestry를 사용하면 너무 편리했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Sotq_17/items/120256209993fb05ebac텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)