学習記録

アウトプット用に作りました

ページタイトルの出力

f:id:kimura34:20210317124144p:plain
記事タイトルとは、このような各ページの名前のことです。
ここでは、「ブログの記事名 - ブログ名」 という形で出力されています。

この表記がどのように書かれて出力されているのかを説明していきます。


まず各ページに同じタイトルを表示させるには、
application.html.erbに、

<title>学習記録</title>

と記載しますよね。

もしも各ページで別のタイトルをつけたい時は、下記のように書きます。

(application.html.erb)
<title><%= yield(:title) %></title>

(article.html.erb)
<% content_for(:title, 'ActionMailerを使用') %>

このように書くことで、article.html.erbがブラウザに表示された際にタイトルが'ActionMailerを使用'に変わります。
各テンプレート間で異なる情報をレイアウトファイルに伝えたい時は、
content_forprovideを使います。ここでは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