rails 技術ブログ

rails 技術ブログ

勉強したことをアウトプットしていきます

provideとyieldを活用する

<html>
  <head>
    <title>Home | Ruby on Rails Tutorial Sample App</title>
  </head>
  <body>
    <h1>Home</h1>
  </body>
</html>
<html>
  <head>
    <title>Help | Ruby on Rails Tutorial Sample App</title>
  </head>
  <body>
    <h1>Help</h1>
  </body>
</html>

上の2つのコードを見比べてみるとHTML構造とタイトルはほぼ同じ。
(違うのはタイトルの先頭とbodyの内容のみ)
これだとDryの原則に反するため、まとめられるものはapplicationビューにまとめたい。


そのときに活用できるのがprovideメソッドです。
使い方↓

<% provide(:title, "Home") %>

provide(:title)に引数を渡す

<%= yield(:title) %>

表示させたい部分にyield(title)を置くことで、provideメソッドで渡した引数が展開される

最初のビューに活用してみるとこのようになる↓
①applicationビューに「HTML構造」と「provideメソッドを受け取るためのyield」を書く

<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
  </head>
  <body>
    <%= yield %>
  </body>
</html>


②yieldに渡すためのprovideメソッドを書く(引数にHomeを入力)
HTML構造はapplicationビューに記載したため、削除する

<% provide(:title, "Home") %>
    <h1>Home</h1>


③help.html.erbも同様

<% provide(:title, "Help") %>
    <h1>Help</h1>



最初のコード2つのコードと最後の3つのコードはブラウザで確認すると同じ画面が表示されるはずです。

ちなみに、applicationビューに出てきた引数のない<%= yield %>ですが、引数がない場合はデフォルトでそれぞれのビューを表示させてくれます。