content_forを使ってタイトル名を変えていく
content_for
というヘルパーを使って
「 ページ名 | 固定タイトル 」
と出力するやり方を見ていく。
手順
①app/helpers/application_helper
にヘルパーメソッドを記入
②views/layouts/application
にメソッドを記入
③viewにそれぞれのタイトルを入れていく
①app/helpers/application_helper
にヘルパーメソッドを記入
app/helpers/application_helper.rb
module ApplicationHelper
def page_title(page_titlle = '')
base_title = 'SAMPLE BOARD APP'
page_title.empty? ? base_title : page_title + ' | ' + base_title
end
end
page_title.empty? ? base_title : page_title + ' | ' + base_title
この一文は見慣れないが、条件演算子(三項演算子)を使った書き方となっている。
この一文をif分に書き換えると下記のようになる。
if page_title.empty?
base_title
else
page_title + " | " + base_title
end
②views/layouts./application
にメソッドを記入
views/layouts/application.html.erb
<html>
#省略
<head>
<title><%= page_title(yield(:title)) %></title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
</head>
#省略
<title>
タグの中に、先ほど定義したpage_title
を記入することで、他のページにも柔軟に対応できるようになる。
③viewにタイトルを入れていく
ja.yml
にタイトルの翻訳を済ましている状態かどうか確認する。
例えば、ログインページのタイトルを入れたい時には、user_sessions.htmlファイル
の先頭にタイトルを設定。
user_sessions.html.rb
<% content_for(:title, t('.title')) %>
また投稿毎のタイトルを表示させたい場合は以下のようになる。
post.html.rb
<% content_for(:title, @post.title) %>