[Rails]パンくず機能
はじめに
画面遷移をわかりやすくするために、gretelというgemを使用してパンくず機能を実装しました。
目次
- 1. gretelのインストール
- 2. パンくずの設定
- 3. ビュー
1. gretelのインストール
gretelというgemを用いることで、リンクを設置したリストを画面に表示させるパンくずを実装することができます。
gem "gretel"
ターミナル
bundle install
2. パンくずの設定
パンくずの親子関係を設定するファイルを作成します。
ターミナル
rails g gretel:install
例
crumb "現在のページ名(表示させるビューにもページ名記述)" do
link "パンくずリストでの表示名", "アクセスしたいページのパス"
parent :親要素のページ名(前のページ)
end
crumb :root do
link "ホーム", root_path
end
crumb :posts do
link "クチコミ一覧", posts_path
parent :root
end
crumb :post_show do |post|
link post.name, post_path(post)
parent :posts
end
crumb :user do |user|
link user.nickname, user_path(user)
parent :root
end
# 親カテゴリーのパンくず
crumb :parent_category do |category|
category = Category.find(params[:id]).root
link "#{category.name}", search_post_path(category)
parent :root
end
# 子カテゴリーのパンくず
crumb :child_category do |category|
category = Category.find(params[:id])
# 表示しているページが子カテゴリーの一覧ページの場合
if category.has_children?
link "#{category.name}", search_post_path(category)
parent :parent_category
# 表示しているページが孫カテゴリーの一覧ページの場合
else
link "#{category.parent.name}", search_post_path(category.parent)
parent :parent_category
end
end
# 孫カテゴリーのパンくず
crumb :grandchild_category do |category|
category = Category.find(params[:id])
link "#{category.name}", search_post_path(category)
parent :child_category
end
crumb :post_new do
link "新しいクチコミ投稿", new_post_path
parent :root
end
crumb :name_search do |search|
if search == ""
link "クチコミ検索結果", name_search_posts_path
else
link "「#{search}」のクチコミ検索結果", name_search_posts_path
end
parent :posts
end
カテゴリーのパンくずリストは、親カテゴリー > 子カテゴリー > 孫カテゴリーになるように設定しています。
子カテゴリーの処理については、孫カテゴリーのページから呼び出した場合(孫カテゴリーを選択した時)と、子カテゴリーのページから呼び出した場合(子カテゴリーを選択した時)の2つの条件で処理を変えるようにします。
3. ビュー
今回はパンくずを表示させたいところだけに適応したかったので、部分テンプレートを作成しました。
<div>
<%= breadcrumbs separator: " › " %>
</div>
separator: " › “はパンくずの区切りである「>」を示します。
投稿一覧のindexファイルだけ載せておきます。
~略~
<% breadcrumb :posts %>
<%= render "shared/breadcrumbs" %>
~略~
breadcrumb :postsはbreadcrumbs.rbで設定したページ名を記述しています。
参考リンク
Author And Source
この問題について([Rails]パンくず機能), 我々は、より多くの情報をここで見つけました https://qiita.com/iwkmsy9618/items/9431474a35330d6d1fc7著者帰属:元の著者の情報は、元の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 .