Ruby on Railsで各ページのタイトルを設定する方法
Ruby on Railsで各ページのタイトルをどう設定すればよいのか悩みました。 いろんな記事を見ても、メンテナンス性の観点からどうもしっくり来ず。。。 なので、自分なりの設定方法を考えてみました。
私はエンジニアとして活動している訳ではないので、エンジニアの知り合いもおらず、どの方法がベストプラクティスか分かりません。 よければご教示ください。。。
設定方法
各ページのタイトルの設定
各ページのタイトルはconfig/locales/ja.yml
に以下のように設定します。
ja:
title:
base: 'サイト名'
sessions:
new: 'ログイン'
users:
index: 'ユーザ一覧'
show: 'プロフィール'
new: 'アカウント作成'
edit: 'アカウント編集'
ビューから呼び出すためのヘルパー
app/helpers/application_helper.rb
に、以下のようにタイトルを設定する関数を書きます。
def title
@page_title = t("title.#{controller.controller_name}.#{controller.action_name}", default: '') if @page_title.nil?
if @page_title.empty?
t('title.base')
else
@page_title + ' | ' + t('title.base')
end
end
def title_variable(title)
@page_title = title
end
ビューでタイトルを表示する
app/views/layouts/application.html.erb
で以下のようにシンプルに呼び出します。
<title><%= title %></title>
動的なタイトルを設定する
プロフィールページで「○○さんのプロフィール」など、値に応じて異なるタイトルにする場合は、以下のように各ビューにタイトルを埋め込みます。
たとえば、以下はapp/views/users/show.html.erb
の例です。
<% title_variable "#{@user.name}さんのプロフィール" %>
おわりに
よく見られるprovide/yield
を用いた方法や、t ('.title')
を用いた方法なども試したのですが、上記の方法の方がよいのかな? と思いました。
他によい方法をご存知の方、ぜひぜひコメントなどお願いします!