読み込み順番によって変わるやつ。ということで なるべく使わないほうがいい けど動作だけ
環境
rails (5.0.2)
動作概要
通常のviewテンプレートの yield
の 記述の前に content_for
を 含むpartialを render
すれば出てくる。
逆にyield
の 記述のあとに content_for
を書いても出てこない。
ただし、layoutは位置関係無く反応する。
例
app/views/layouts/application.html.erb
に以下のようにする
<!DOCTYPE html> <html> <head> <title>SampleApp</title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_tag 'application', media: 'all' %> </head> <body> <%= yield(:head_item) %> <%= yield %> </body> </html>
app/views/hoges/_partial1.html.erb
として以下を用意する
<p>partialその1</p> <% content_for :title do %> <p>これはcontents_forで記述されたものです</p> <% end %> <% content_for :head_item do %> <p>これはheaditemのcontent_forで記述されたものです</p> <% end %> <p>partialその1おわり</p>
yieldの前にrenderすると表示されるケース
下記のように render
のあとに該当のyield要素がcontent_forで記述されていれば表示される
<p>該当ページ </p> <%= render "hoges/partial1" %> <p><%= yield(:title) %></p>
上記の場合、下記のようにhtml出力される(body要素以外は割愛)
<body> <p>これはheaditemのcontent_forで記述されたものです</p> <p>該当ページ </p> <p>partialその1</p> <p>partialその1おわり</p> <p> <p>これはcontents_forで記述されたものです</p> </p> </body>
yieldのあとにrenderすると表示されるケース
下記のように render
の前にに該当のyield要素がcontent_forで記述されていれば表示されない
<p>該当ページ </p> <p><%= yield(:title) %></p> <%= render "articles/partial1" %>
上記の場合、下記のようにhtml出力される(body要素以外は割愛)
<body> <p>これはheaditemのcontent_forで記述されたものです</p> <p>該当ページ </p> <p></p> <p>partialその1</p> <p>partialその1おわり</p> </body>