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 %>ですが、引数がない場合はデフォルトでそれぞれのビューを表示させてくれます。