ページタイトルの出力
記事タイトルとは、このような各ページの名前のことです。
ここでは、「ブログの記事名 - ブログ名」 という形で出力されています。
この表記がどのように書かれて出力されているのかを説明していきます。
まず各ページに同じタイトルを表示させるには、
application.html.erbに、
<title>学習記録</title>
と記載しますよね。
もしも各ページで別のタイトルをつけたい時は、下記のように書きます。
(application.html.erb) <title><%= yield(:title) %></title> (article.html.erb) <% content_for(:title, 'ActionMailerを使用') %>
このように書くことで、article.html.erbがブラウザに表示された際にタイトルが'ActionMailerを使用'に変わります。
各テンプレート間で異なる情報をレイアウトファイルに伝えたい時は、
content_for
やprovide
を使います。ここではcontent_for
を使用しました。
content_for
というメソッドは、Railsにデフォルトで用意されているものです。
helperを使ってタイトルを定義する
application.html.erbに直接書いても問題ないですが、
微調整が必要になったときに編集できるようhelperを使ってタイトルを定義しておくと管理しやすいです。
helperはviewで使うものを定義するファイルです。
(app/helpers/application_helper.rb) def page_title(page_title = '') base_title = "学習記録" if page_title.empty? base_title else page_title + " - " + base_title end end
※ page_titleのデフォルト値で空文字を指定するのは、empty?メソッドはnilに使用するとエラーがでるからです。
そしてpage_titleヘルパーメソッドをapplication.html.erbで使えるようにします。
(application.html.erb) <title><%= page_title(yield(:title)) %></title>
個別のページタイトルをcontent_for
をつかって伝えます。
(article.html.erb) <% content_for(:title, 'ActionMailerを使用') %>
helperでのメソッドの定義では、三項演算子を使って簡潔に書くこともできます。
def page_title(page_title = '') base_title = '学習記録' page_title.empty? ? base_title : page_title + ' - ' + base_title end