テックキャンプ日誌 Day62 (パンくず)

テックキャンプ日誌(全70日間)

62日目終了。

↓今日やったこと

・フリマアプリ パンくず機能実装!

 

昨日苦戦していたのですが、神ページを見つけて完成させることができました!これです→https://qiita.com/Iwa_tech/items/61d1681687739faffab0

昨日は変数を渡すことばっかり考えていましたが、渡すのではなく生成すれば良いということが分かりました!

ちょっと理解が難しいところがありましたので、上のページの補足説明をしていきたいと思います。(ある程度gretelの仕様を把握されている方向けです。)

 

【Rails】パンくず機能実装(gretel使用)補足説明

上のページを参考に自分はこんな感じでbreadcrums.rbを作りました。

config/breadcrumbs.rb

# config/breadcrumbs.rb

crumb :root do
  link "FURIMA", root_path
end

crumb :categories do
  link "カテゴリー一覧", categories_path
  parent :root
end

crumb :parent do |category|
  category = Category.find(params[:id]).root
  link category.name, parent_category_path(category)
  parent :categories
end

crumb :child do |category|
  category = Category.find(params[:id])
  # 表示ページが子カテゴリーの一覧ページの場合
  if category.has_children? 
    link category.name, child_category_path(category)
    parent :parent
  else
  # 表示ページが孫カテゴリーの一覧ページの場合
    link category.parent.name, child_category_path(category.parent)
    parent :parent
  end
end

crumb :grandchild do |category|
  category = Category.find(params[:id])
  link category.name, grandchild_category_path(category)
  parent :child
end

使用Viewファイル

index.html.haml  (categories#index) #カテゴリー一覧

parent.html.haml  (categories#parent) #親カテゴリー

child.html.haml  (categories#child) #子カテゴリー

grandchild.html.haml  (categories#grandchild) #孫カテゴリー

ポイント1

各viewファイルでbreadcrumbsを呼んであげる必要があります。

表示したいところに下記コード記述。(僕は何故かindexだけでいいと勘違いしていました。)

(例)parent.html.haml の親カテゴリーviewファイルにて

- breadcrumb :parent  # ← crumbで名付けた名前
= breadcrumbs separator: " › "

 

ポイント2

読み込んだviewファイルによってcategory変数(breadcrums.rb内)の値が変わります。

上のbreadcrums.rbコードでchildだけ場合分けされているのがこのためです。

childでは子カテゴリーを表示している場合は、category = 子カテゴリーとなっていますが、孫カテゴリーを表示している場合のchildは、category = 孫カテゴリーとなっています。

そのため、category.parent = 子カテゴリーとして場合分けする必要があります。

 

ここで、なぜparentは場合分けしなくてもいいの?と疑問に思った方もいると思います。

場合分けしなくても良い理由は、parentは .root をつけて生成しているからです。

category = Category.find(params[:id]).root

こうすることで、子カテゴリーでも孫カテゴリーでも表示していても、その一番大元にあたる親を取得できるのです!なのでparentは場合分けの必要がありません。

 

一応自分的に閃いて、.root.childrenにすればchildも場合分けしなくてもいいんじゃね?と思ってやってみたのですが、値を取得できませんでした・・・_| ̄|○

なので場合わけは必須かと思います。

 

パンくずに迷える子羊にとって役に立てば幸いです。

ではまた明日!