fv17の日記 - Coding Every Day

Webエンジニアの備忘用ブログです。主にWeb界隈の技術に関して書いています。

Rails - タイトルタグの中身を動的に変更する

記事概要

各View毎にタイトルを変えたい場合の実装方法

参考:rails tutorialの第3章、第4章

現状のコードと問題点

現状のコードだと、全てのページでタイトルが「Sample App」になってしまう。

application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title>Sample App</title>
  </head>
  # ...
</html>

やりたいこと

下記のように各View毎にタイトルを変更したい。

  • Homeページでは、「Home | Sample App」
  • Aboutページでは、「About | Sample App」
  • Helpページでは、「Help | Sample App」

実装

ポイントは2つ

  • provide関数とyield関数を使って、各viewからapplication.html.erbに値を渡す
  • page_titleが空欄の場合があり、処理が複雑になるのでヘルパーに切り出す

各View

provide(:title, "ここにタイトル")

application.html.erb

<title><%= full_title(yield(:title)) %></title>

application_helper.rb

def full_title(page_title = '')
  base_title = "ここにアプリ名称とか"
  if page_title.empty?
    base_title
  else
    "#{page_title} | #{base_title}"
  end
end