[Rails]タイトルを動的に出力する14/20
はじめに
content_for
を使って各テンプレートファイルからレイアウトファイapplication.html.erb
にタイトル情報を渡せます。
現状タイトルはこのようになっています。
以下のようにタイトルが表示されるように実装します。
トップページ・・・・・・Article APP
ログインページ・・・・・ログイン | Article APP
ユーザー登録ページ・・・ユーザー登録 | Article APP
投稿作成ページ・・・・投稿作成 | Article APP
投稿一覧ページ・・・・投稿一覧 | Article APP
投稿詳細ページ・・・・個別の投稿のタイトル名 | Article APP
環境:
Rails 6.1.7.3
ruby 3.0.0
content_for
とは
content_for
メソッドは、ビューテンプレート内でコンテンツを定義して、レイアウトテンプレートの特定の場所にそのコンテンツを挿入するために使用されます。
通常、レイアウトテンプレートはアプリケーションの全体的なデザインや構造を定義し、ビューテンプレートはそれに基づいて具体的なコンテンツを提供します。しかし、レイアウトテンプレートの特定の部分(例:サイドバー、ヘッダー、フッターなど)をビューテンプレートから動的にカスタマイズしたい場合があります。
ここでcontent_for
が登場します。ビューテンプレート内でcontent_for
メソッドを使用して特定のキーとコンテンツを定義すると、そのコンテンツはレイアウトテンプレートの対応する部分で表示されます。つまり、ビューテンプレートからレイアウトテンプレートにコンテンツを挿入することができます。
以下はcontent_for
の使用例です:
レイアウトテンプレート(例:application.html.erb
)内で、yield
メソッドを使用してコンテンツを表示する場所を定義します。
<%= yield :sidebar %>
ビューテンプレート内で、content_for
メソッドを使用して特定のキーとコンテンツを定義します。
<% content_for :sidebar do %>
<div class="sidebar">
<!-- サイドバーコンテンツ -->
</div>
<% end %>
このようにすると、ビューテンプレート内で定義されたサイドバーコンテンツが、レイアウトテンプレートのyield :sidebar
部分に挿入されます。
content_for
を使用することで、ビューテンプレートとレイアウトテンプレートの間で柔軟なコンテンツの共有とカスタマイズが可能になります。
helper
とは
ヘルパー(Helper)は、Railsで使用される再利用可能なメソッドの集合です。ヘルパーメソッドは、ビューファイルやコントローラー、モデルなどのRubyコード内で呼び出すことができます。主な目的は、ビューファイルのコードを簡潔に保ち、再利用可能なコードを書くことです。
一般的なヘルパーの例としては、以下のようなものがあります:
-
テキストヘルパー:テキストのフォーマットや変換、エスケープなどのタスクを実行します。例えば、
link_to
メソッドは、リンクを生成するためのヘルパーメソッドです。 -
日付ヘルパー:日付や時刻のフォーマットや表示方法を提供します。例えば、
time_ago_in_words
メソッドは、指定した日時から現在までの経過時間を表示するためのヘルパーメソッドです。
ヘルパーメソッドは、ビューファイル内で呼び出すことができますが、コントローラーやモデルからも呼び出すことができます。ただし、ヘルパーメソッドは主にビューロジックに関連するタスクを処理するために使用されるため、コントローラーやモデル内での使用は制限されるべきです。
ヘルパーファイルは、app/helpers
ディレクトリ内に配置されます。デフォルトでは、RailsはApplicationHelper
という名前のヘルパーファイルを提供します。
例えば、表示する日付をフォーマットするヘルパーメソッドを作成する場合、以下のようにします:
module ApplicationHelper
def formatted_date(date)
date.strftime("%Y-%m-%d")
end
end
上記の例では、formatted_date
というヘルパーメソッドを定義しています。これは、引数として渡された日付を指定されたフォーマットで返します。
ビューテンプレート内でこのヘルパーメソッドを使用するには、以下のようにします:
<p>投稿日: <%= formatted_date(@post.created_at) %></p>
このようにすると、formatted_date
メソッドが呼び出され、@post.created_at
の値が指定されたフォーマットで表示されます。
ヘルパーメソッドは、ビューテンプレート内で一般的な操作や計算を行うために使用されます。例えば、HTMLの生成、URLの生成、テキストのフォーマットなどが含まれます。ヘルパーは、ビューファイル内でロジックを繰り返し記述する代わりに、より効率的で保守性の高いコードを実現するための手段として活用されます。
helperを作成する
三項演算子を使ってタイトルの出力を定義します。
module ApplicationHelper
def page_title(title)
base_title = 'Article APP'
title.empty? ? base_title : title + " | " + base_title
end
end
yield
を使ってタイトルを表示させる
<title><%= page_title(yield(:title)) %></title>
投稿一覧ページ
<% content_for(:title, t('.title')) %>
投稿詳細ページ
<% content_for(:title, @article.title) %>
投稿作成ページ
<% content_for(:title, t('.title')) %>
ブックマーク一覧ページ
<% content_for(:title, t('.title')) %>
ログインページ
<% content_for(:title, t('.title')) %>
登録ページ
<% content_for(:title, t('.title')) %>
翻訳を登録する
ja:
defaults:
sessions:
new:
title: 'ログイン'
edit:
title: 'パスワード更新'
new:
title: 'パスワードリセットリクエスト'
articles:
index:
title: '投稿一覧'
bookmarks:
title: 'ブックマーク一覧'
new:
title: '投稿作成'
edit:
title: '投稿編集'
show:
title: '投稿詳細'
signup:
new:
title: '新規登録'
おわりに
ヘルパーメソッド便利ですね。
また、content_for
とyield
を使うことでテンプレートファイルの情報をレイアウトファイルに渡すことができました。
Discussion