Railsチュートリアルの三章やったのでまとめてみる。(cssは今回は触れない)
Railsのview-controllerについて
RailsはMVCアーキテクチャだが、JSP-Servlet(古い…)みたいにviewに値を埋め込んで返すのではなく、コントローラがviewをレンダリングして返却する。ざっくりした図だが、下の様なイメージ。

erb
Railsのviewでは、htmlにrubyコードを埋め込む'erb'ファイルがよく使われる。
正直erbよりhamlとかの方が便利そうだけど、(hamlはタグ無しで書ける)
勉強のために、書き方がhtmlに近いerbの方を使っていく。
erbにrubyコードを埋め込むには、<% %>
を使用する。
rubyコードの実行結果をタグの中に埋め込みたい場合は=
をつけて<%= %>
とする。
例えば、タグ内で:title
をyieldしたい時は下の様に書く
<title><%= yield(:title) %></title>
layout
Webシステムを作成する時、ページのタイトルやレイアウト等、全ページに共通する要素がいくつもある。
これを一つ一つのerbファイルに書いていくと、共通部分という時も全て編集しないといけなくなる。
例えば、10ページほどで構成されているWebページのレイアウトが変わってしまったという場合は
10ページ全てで手作業で編集する羽目になるし、バグの原因にもなりかねない
こうした共通部分をlayoutに括り出すことによって、全ページの修正を一回で済ませることができる。
provide, yield
layoutの共通部分に変数を埋め込みたい場合は、erbでprovideヘルパーを使う。
erbでprovideした変数をlayout側でyieldすると、その変数を評価してerbに埋め込まれる。
yieldに引数を与えない場合は、viewをそのまま評価する
- layout
<!DOCTYPE html>
<html>
<head>
<title><%= yield(:title) %></title>
</head>
<body>
<%= yield %>
</body>
</html>
- view
<% provide(:title, "ブログ")%>
<h1>ホーム</h1>
<p>
修得した技術や所感をまとめていきたいと思っています。
<a href="https://qiita.com/flowerhill">Qiitaもやってます</a>
</p>
上の様にlayoutとviewを作成すると、ブラウザからアクセスした時次の様なhtmlを生成する
<!DOCTYPE html>
<html>
<head>
<title>ブログ</title>
</head>
<body>
<h1>ホーム</h1>
<p>
修得した技術や所感をまとめていきたいと思っています。
<a href="https://qiita.com/flowerhill">Qiitaもやってます</a>
</p>
</body>
</html>
まとめ
RailsからControllerを呼び出した時に、どの様にViewを呼び出すか大体理解できたと思う。
erbの書き方やlayoutの使い方まで修得できた。
本当はヘルパーメソッドやテスト(rspec)の書き方もまとめたかったけど、長くなるので一旦ここまで。(正直疲れた…)