ztbuz@dev

人生に絶望しているZが、それでも技術を身につけようと必死になるブログ

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')を用いた方法なども試したのですが、上記の方法の方がよいのかな? と思いました。

他によい方法をご存知の方、ぜひぜひコメントなどお願いします!