LoginSignup
16
20

More than 3 years have passed since last update.

【Solidus】 入れ子構造の商品カテゴリー(taxon)を取得し、Awesome Nested Setのメソッドを使用する

Last updated at Posted at 2021-02-24

はじめに

Solidusで追加機能実装をする際、商品カテゴリーで採用されている入れ子構造を把握する必要があったため、紹介します。
入れ子構造は、ツリー構造をもとに設計されおり、ツリー(木)やルート(根)、リーフ(葉),ノード(節)などの言葉が出てきます。

到達点

以下の2点を達成します

・solidusの商品カテゴリーで採用されている入れ子構造を理解する

・Gem Awesome Nested Setで使用できるメソッドを理解する

商品カテゴリーで採用されている入れ子構造

今回、商品カテゴリーは以下の通りです

Category
|--Bags
|--Mugs
|--Clothing
    |--Shirts
    |--T-Shirts

Brand
|--Chanel
|--Vuitton

一つ一つのツリーをSpree::Taxonomyモデルとし、
今回は、Category(taxonomy.id=1)とBrand(taxonomy.id=2)が該当します。
rootとも表現できます。

各ツリーのノードをSpree::Taxonモデルとし、
今回は、Category、Brandを含めそれ以下全てが該当します。


Awesome Nested Setで使用できるメソッド

Soidusでは、Railsのカテゴリを階層で管理してくれるGem Awesome Nested Set を実装しております。
追加実装で使用したメソッドを紹介します。



root:ツリートップ
 Spree::Taxon.roots
→ Category,Brand を取得


leaf:末端
 Category.leaves
→ Bags,Mugs,Shirts,T-Shirts を取得 *Clothingは末端ではない


child:直近の子ノード
 Category.children
→ Bags,Mugs,Clothing  を取得        *Shirts,T-Shirtsは孫ノード


parent:直近の親ノード
 Bags.parent
→ Category を取得 

他にも以下のサイトで使用できるメソッドを確認できます。
https://github.com/collectiveidea/awesome_nested_set/wiki/Awesome-nested-set-cheat-sheet

参考文献

SQLアンチパターン
SolidusでECサイトを作る際の方法と考え方

16
20
0

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
16
20