ancestryにてカテゴリー機能実装後の表示方法について
はじめに
某フリーマーケットサイトのクローンを開発中に
ancestryで作成したカテゴリーをデータベースに保存する事はできたのですが、
いざ詳細画面に表示しよう!
これが意外に難しい。。。。
色々調べたのですが、ドンピシャの記事がなかったので忘備録として載せておきます。
やりたいこと
出品時に保存したカテゴリーの値を商品詳細画面にて表示させたい。
データベース
試したコード
最初に試したコードがこちら
def show
@product = Product.find(params[:id])
end
= @product.category_id.name
やはり一筋縄ではいかなかったようです。。。
そもそも、ancestryを深く理解できていなかったので、本当に保存できているのか不安でした(笑)
とりあえず全ての値を取り出せるか試してみようと思いコントローラーに@parentsを追加。
def show
@product = Product.find(params[:id])
@parents = Category.all.order("id ASC").limit(607) #limitの数値はテーブルに入っているIDの最大値です。
end
- @parents.each do |parent| #eachで全てを取り出す。
= parent.name
とりあえず全てを取り出すことに成功!!
ここから、出品された商品のcategory_id(今回は589)と結びつける必要があります。
そこで、ifを使い、
- @parents.each do |parent| #eachで全てを取り出す。
- if @product.category_id == parent.id #取り出したIDと商品のIDが同じ物を表示
= parent.name
孫カテゴリーの名前を取り出すことに成功!
ここまできたらもう一息!!!
- @parents.each do |parent|
- if @product.category_id == parent.id
= link_to "#" do
= parent.parent.parent.name #親カテゴリー
%br
= link_to "#" do
= parent.parent.name #子カテゴリー
%br
= link_to "#" do
= parent.name #孫カテゴリー
コード自体は単純で孫カテゴリーに.parentをつけることで、ひとつ上の階層にあるカテゴリー名(子カテゴリー)を取り出し、更に.parent.parentとすることで親カテゴリーを取り出すという仕組みです。
まとめ
終わってみると案外シンプル。
しかし、私はこれを表示するのに2時間近く奮闘していました(笑)
もっと簡単な方法もたくさんあるとは思いますが、
自分はこれで実装ができたので、少しでも誰かの手助けになれば嬉しいです。
Author And Source
この問題について(ancestryにてカテゴリー機能実装後の表示方法について), 我々は、より多くの情報をここで見つけました https://qiita.com/kenken9999/items/4eae326385765edef221著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .