某スクールの最終課題でパンくず機能を実装した際の思い出です。
パンくず機能とは
サイトの上の方にあるページの移動の軌跡の表示したもののこと。
メルカリでいうところのヘッダーの下にあるこれのことです。
①gem 'gretel'の導入
パンくず機能を実装するのに便利なgem。
お洒落な名前してますね。
Gemfileに
gem "gretel"
を追記します。
bundle installも忘れずに。
###②ファイルの生成
$ rails generate gretel:install
このコマンドで以下のようなファイルができます。
crumb :root do
link "Home", root_path
end
# crumb :projects do
# link "Projects", projects_path
# end
# crumb :project do |project|
# link project.name, project_path(project)
# parent :projects
# end
# crumb :project_issues do |project|
# link "Issues", project_issues_path(project)
# parent :project, project
# end
# crumb :issue do |issue|
# link issue.title, issue_path(issue)
# parent :project_issues, issue.project
# end
# If you want to split your breadcrumbs configuration over multiple files, you
# can create a folder named `config/breadcrumbs` and put your configuration
# files there. All *.rb files (e.g. `frontend.rb` or `products.rb`) in that
# folder are loaded and reloaded automatically when you change them, just like
# this file (`config/breadcrumbs.rb`).
###③実際に表示するための変更点
現在はトップページの記述のみが自動生成されている状態です。
ここからユーザーのマイページにつなげようとすると
crumb :root do
link "Home", root_path
end
crumb :mypage do
link "マイページ", user_path
end
# crumb :viewファイルで呼び出す際の名前 do
# link "実際に表示される文章", 表示するページのパス
# end の形で記載
~省略~
という記述を追記してパンくず機能を表示したいマイページのビューファイルの表示したい場所に
- breadcrumb :mypage
= breadcrumbs pretext: "",separator: " › ", class: "breadcrumbs-list"
を追記します。
1行目の- breadcrumbに続いてconfig/breadcrumbs.rb内で定義したキーを記述しています。
2行目のpretextとseparatorはオプションでそれぞれ
・pretext...パンくずリストの頭に表示される文章。
・separator...パンくずリストの区切り肩を指定。上の記述だと「›」で区切られる。
他にもオプションの種類はあるようなので調べてみてください。
####④親の設定と出会したエラー
config/breadcrumbs.rbに
crumb :root do
link "Home", root_path
end
crumb :mypage do
link "マイページ", user_path
end
crumb :likes do
link "いいね一覧", likes_users_path
parent :mypage
end
~省略~
のようにparent :mypageとするとマイページを親としていいね一覧のページを表示することができるそうです。
しかしこの記述でいいね一覧のページに遷移してみると...
のようにエラーが出ました。
おそらくですがマイページのパスが /users/:idだったのですがこの:idの値が取得できないためにエラーが出たのだと思います。
なのでconfig/breadcrumbs.rbのマイページの記述に
crumb :root do
link "Home", root_path
end
crumb :mypage do
link "マイページ", user_path(current_user.id) # ← (current_user.id)を追記
end
crumb :likes do
link "いいね一覧", likes_users_path
parent :mypage
end
~省略~
と追記することでエラーが解消して以下のように正常に表示されました。
以上で基本の実装は終わりです。
今回実装の参考にさせていただいた記事
https://qiita.com/Azure0701/items/16de34a0010eb7f05d89