LoginSignup
46
51

More than 5 years have passed since last update.

yieldについて

Last updated at Posted at 2017-05-08

htmlへviewsの各内容を引っ張ってくるもの。

レイアウトファイルには全体で共有するhtml.erbがあり、rails newで自動生成されるファイルの、app/views/layouts/application.html.erbがそれにあたる。
このbodyタグ内に<%= yield %>と入っており、ここに各ページの内容として別途作成されたhtmlファイルの内容を持ってくるわけである。
(そのためには rails g で作成する app/controllers/アプリ名_controller.rb と config/routes.rb で各ファイルをルーティングしてあげないといけないが)

具体的には、

application.html.erb
<!DOCTYPE html>
<html>
<head>
  中略
</head>
<body>

<%= yield %>

</body>
</html>

・・・とあるところへ、home.html.erbがルーティングされていてその内容が以下だったとして。

home.html.erb
<h1>サンプルアプリ</h1>
<p>これはサンプルアプリです</p>

かなりシンプルな内容ではあるが、サーバーを起動し、urlに「/アプリ名/home」を追記した先では上記二文の文字列が表示されるようになる。

また、titleタグのみに影響させることも可能で、

application.html.erb
<!DOCTYPE html>
<html>
<head>
  <title>アプリ名 | <%= yield(:title) %></title>
  中略
</head>
    後略

と、タイトルにyieldに(:title)をつけてあげて、今度はさっきのhome.html.erb側に以下・・・

home.html.erb
<% provide(:title, 'ホーム') %>
<h1>サンプルアプリ</h1>
<p>これはサンプルアプリです</p>

・・・と、最初に一行追加してあげます。
すると、:titleに文字列「ホーム」が代入され、それがyieldによって持って行かれて、またhomeを開いてあげるとタイトルの横に「ホーム」と付くようになる、と。

46
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
51