gretelを使用したパンくずリストの作成
1. gretelをインストールした後、以下のコマンドを実行する
# Gemfile gem 'gretel' => bundle installコマンドを実行
以下のコマンドを実行することで、config配下にbreadcrumb.rbというファイルが生成される。
% bin/rails generate gretel:install
2. 設定ファイルを編集する
生成されたファイルを確認すると、以下のようになっている。
# config/breadcrumb.rb crumb :issues do link "All issues", issues_path end crumb :issue do |issue| link issue.title, issue_path(issue) parent :issues end
:issue
の部分はパンくずの名前になる。
他のパンくず設定で親(parentの部分)を定義するときや、以降で設定するviewファイルでパンくずを呼び出す際の名前を設定する。
link
の部分はパンくずリストに表示されるテキストとリンク先を設定する(書き方はRailsのヘルパーメソッドのlink_toと同様)。
URI Patternが/issues/:id
のような、issueのidをパスに含める必要がある場合には|issue|
のようにブロック変数を渡す必要がある。
parent
の部分は現在ここで作ったページの親ページが何かを設定する。今回の場合、:issue
だと:issues
が親に相当する。
3. viewファイルを編集する
最初に、パンくずリストを表示させたい箇所に以下のコードを記述する。
<%= breadcrumbs separator: " › " %>
separator: " › "
はパンくずで表示される文字を区切る部分に入る文字を指定する。>
だとHTMLタグと認識され、表示されない可能性があるので、特殊文字を使用している。
今回は全画面にパンくずリストを表示させたいのでapplication.html.erb
に記述する。
# app/views/layouts/application.html.erb <!DOCTYPE html> <html> <head> ・・・ </head> <body> <%= breadcrumbs separator: " › " %> <%= yield %> </body> </html> end
次に設定ファイルで設定したcrumb名を各viewファイルに指定する。
# app/views/issues/index.html.erb <%= breadcrumbs :issues %>
# app/views/issues/show.html.erb <%= breadcrumbs :issue, @issue %>
詳細ページでは:issue
のcrumbを使用している。
ここで、設定ファイルで設定したcrumb :issue
ではブロック変数を渡しており、ブロック変数には元となるインスタンスを渡さなければならない。
よって、詳細ページのviewファイルでは@issue
のインスタンスを渡してある。