ancestryの表示方法


ancestryの使い方は見かけますが、表示のさせ方はなかったので備忘録として投稿いたします。

ancestryについてはこちらの記事でご確認ください。
https://atora1992.hatenablog.com/entry/2019/07/08/215444

作成の都合上、viewファイルはhamlで記述しております。

今回はカテゴリーをこの様に表示をさせたい場合です。

まずはcontrollerを記載します。
productテーブルから商品情報を取得、
その後にcategoryテーブルより親要素を取得します。


省略

  def show
    @product = Product.find(params[:id])
    @parents = Category.where(ancestry:nil)
  end

省略

  private
  def product_params
    params.require(:product)
  end

end

こちらがviewファイルになります。
@parentsをeachで分けていきます。
そしてproductテーブルのcategories_idとcategoryテーブルのidが一致する場合、表示させる様に記述します。


//親要素だけの場合
- @parents.each do |parent|
  -if @product.categories_id == parent.id
    = link_to '#' do
      = parent.name
      %br
//子要素までの場合
  - parent.children.each do |child|
    -if @product.categories_id == child.id
      = link_to '#' do
        = parent.name
        %br
      = link_to '#' do
        = child.name
        %br
//孫要素までの場合
    - child.children.each do |grandchild|
      -if @product.categories_id == grandchild.id
        = link_to '#' do
          = parent.name
        %br
        = link_to '#' do
          = child.name
        %br
        = link_to '#' do
          = grandchild.name
        %br


こちらで表示が完了です。
今回、表示までの内容ですので、リンク先は未記載です。
ご了承ください。