Programming Journal

学習したことの整理用です。

カスタムヘルパーを使って、タイトルを動的に出力する

ページごとにタイトルを変化させて出力したい

タイトルとは、ブラウザのタブ部分に表示されるここのこと↓

f:id:Study-Diary:20200812105705p:plain
タイトル

  • 掲示板作成 | 固定タイトル」のように、左側部分だけページごとに出力を変えたい

  • 掲示板詳細ページのタイトルは、掲示板のタイトルを表示させたい

  • トップページは、「○○作成」などといったタイトルがないため、「|」は不要で、固定タイトルだけ表示させたい

今回の実装の流れ

  • 新しくメソッドを作成する。カスタムヘルパーと呼ばれる。

  • ビュー側に設定を追記していく。

カスタムヘルパーを作成する

module ApplicationHelper
  # ページごとの完全なタイトルを返す
  def page_title(page_title = '')
    base_title = 'Ruby on Rails 学習記録'
    if page_title.empty?
      base_title
    else
      page_title + '  |  ' + base_title
    end
  end
end

こちらのほうがスマート↓↓

def page_title(page_title = '')
    base_title = 'Ruby on Rails 学習記録'

    page_title.empty? ? base_title : page_title + " | " + base_title
  end

条件演算子で、 式? 真だった場合の処理:偽だった場合の処理 となるので、

empty?メソッド + 式? 真だった場合の処理:偽だった場合の処理

?が2つ並んでいる。

作成したヘルパーを使って、Webサイト全体のレイアウト

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

各ページに埋め込んでいく

前提として、事前に翻訳を登録している。(i18n)

users:
    new:
      title: 'ユーザー登録'

各ファイルの頭に、このようにcontentfor`を埋め込んでいく。

<%= content_for(:title, t('.title')) %>

掲示板詳細画面は、タイトルに閲覧している掲示板名を表示したいので、@board.title

<% content_for(:title, @board.title) %>
yieldメソッド

ビューを挿入すべき場所を指定するのに使用する

content_forメソッド

コンテンツを名前付きのyieldブロックとしてレイアウトに挿入できる

参考にしたもの

Rails 6.0 対応でプログラミング学習 - Railsチュートリアル

レイアウトとレンダリング - Railsガイド