Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
29
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

【Rails 】content_forとyieldの使い方

はじめに

今回はRailsにおけるcontent_foryieldの使い方について解説します!
コンテンツを1箇所に保存し、他のビューで使えるようにするためのものです!
ぜひご覧ください:woman_tone1:

使い方

content_forを説明する前に…
まず例として、titleを各ページで変更しない場合について確認します。以下のようにapplication.htmlに書けば良いですね。

application.html
<title>タイトルだよ</title>

そうすると以下のようにタイトルが表示されるはずです。
この場合はapplication.htmlに書いてあるのでどのページでもタイトルが"タイトルだよ"と表示されます。
image.png

しかし、作成するサイトによっては、各ページごとにタイトルを変えたい場合がありますよね。
例えば映画のレビューサイトを作成するとしたら、トップページのタイトルには"サイト名"をつけて、
各映画の詳細ページのサイトにはそれぞれの映画の名前を入れたサイト名をつける、等。

そういった場合application.htmlとそれぞれのhtmlファイルに以下のように記載します。

application.html
<title><%= yield(:title) %></title>
test.html
<% content_for(:title, 'てすと') %>

このように書くことで、test.htmlがブラウザに表示された際にタイトルが"てすと"に変わります。

そしてデフォルト値を設定することもできます!その場合は以下のようにします。

application.html
<title><%= content_for?(:title) ? yield(:title) : でふぉると"%></title>

この例だと、content_forでtitleが設定されていないhtmlファイルの場合は、タイトルが"でふぉると"と表示されます。

また、複数行にわたるような内容をcontent_forを使用して表示させる場合には、以下のようにします。

application.html
<%= yield(:infomation) %>
test.html
<% content_for :information do %>
    <ul>
        <li>最新のお知らせ</li>
    </ul>
<% end %>

このようにcontent_forをdo-endで記述し、ブロック内に呼び出したい内容を記載すれば良いです。

さいごに

contetn_forとyeildを使用することで特定の場所への記述がとてもわかりやすくなります。
ぜひ活用してみてください!
最後までご覧いただきありがとうございました:relaxed:

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
29
Help us understand the problem. What are the problem?