Rails - タイトルタグの中身を動的に変更する
現状のコードと問題点
現状のコードだと、全てのページでタイトルが「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