ボクココ

個人開発に関するテックブログ

共通レイアウトで複数 yield を使う

Rails ネタ。

結論

layout の yield 以外で同様の yield を使いたい場合は content_forを使おう。

解説

app/views/layouts/application.html.erb は共通のレイアウトを定義するデフォルトのレイアウトファイルだ。そこには必ず <%= yield %> が入っていて、各actionのviewはそこに展開される。

さて、たとえば"このページにだけJavaScriptを読み込ませたい"とか"この部分はyieldの他で共通化したい"といったケースがあるだろう。前者はJavaScriptのコードを工夫すればなんとかなるっちゃなるが、コードが煩雑になりがちだった。

そんな時は content_for を使おう。たとえばページ内にだけ projects.css を読み込ませたい場合。

layout 内

<head>  
  <title>Todo List</title>  
  <%= stylesheet_link_tag 'project' %>  
  <%= yield :head %>  
</head>  

ページ内

<% content_for :head do %>  
  <%= stylesheet_link_tag 'projects' %>  
<% end %>

と書ける。application.html.erb をクールに活用してみよう。

雑談

光回線について色々調べてみたら、今は光回線つなぐのに2600円台で繋げられるようだ。これから引っ越しする予定なので、家やマンションで複数内で暮らしたら導入してみよう。