RailsのView入門。テンプレートエンジンとは?パーシャルの活用など
今回はRailsのViewについての記事です。
Viewとはユーザーにデータをどのように見せるかなど表現を行う役割があり、与えられたデータをもとにHTMLを生成し(csv,やjsonの場合もありますが)てクライアントにレスポンスを返します。
ここの話でイメージがわかない方は以下の記事を読んでみると良いと思います。
テンプレートエンジンについて
Railsではerbというライブラリをテンプレートエンジンとして採用しています。
テンプレートエンジンとは、Javaではjsp, PHPだとblade,Rubyだとslim,hamlなどありますが、データとあらかじめ定義されたテンプレートをバインドしてビューへの表示を助けます。
Railsでは、コントローラから渡されたデータはerbなどのテンプレートエンジンに対して渡すことでビューを実現しています。
Railsを最初に触る場合はerbを触って慣れてもいいですが、徐々にslimなども使い始めるとかなり良いと思います。
slimはHTMLを表現するのにpug記法というものを採用していて、HTMLの構造をインデントで表現するのでHTMLの閉じタグを書く必要かなくかなり完結にビューを書くことができます。
erbに慣れてきたら次はslimなどを使ってみるのをオススメします。
コントローラからデータを受け取る
ビューはコントローラからデータを受け取りHTMLを表示していきます。
<p id="notice"><%= notice %></p>
<h1>Blogs</h1>
<table>
<thead>
<tr>
<th>Title</th>
<th>Content</th>
<th>Category</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @blogs.each do |blog| %>
<tr>
<td><%= blog.title %></td>
<td><%= blog.content %></td>
<td><%= blog.category_id %></td>
<td><%= link_to 'Show', blog %></td>
<td><%= link_to 'Edit', edit_blog_path(blog) %></td>
<td><%= link_to 'Destroy', blog, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Blog', new_blog_path %>
コード例では@blogsという形でデータを受けとってビューをレンダーしていきます。
また特にerbでは、rubyの演算結果を表示する場合はHTML内に<%= %>という形で書いていき、ただループなど演算をしたいだけの時は<% %>で書いていきます。
パーシャルを活用する
RailsのViewではパーシャルという機能を使ってビューを小さい単位に分割していく事ができます。
パーシャルのファイル(テンプレートファイルと言ったりもします)はファイル名を_ではじめます。
ビュー内でテンプレートファイルは以下のように呼び出して引数でパーシャル内で利用する変数を渡す事ができます。
render 'form', blog: @blog
このようにビューを、小さい単位で分割すると再利用性が高まりほかの画面で同じようなHTMLを生成したい場合に必要なデータだけ与えれば同じようなビューを再現できるようになります。
Railsを始めた当初から再利用性も意識して実装をしていくのは大変ですが、始めにこれを知ってから徐々に利用していくのと全く知らないのとでは大違いなのでいきなり使わなくとも概念はおさえておくようにしましょう。
まとめ
- テンプレートエンジンはビューの実装を助けるライブラリ
- Rubyにはslimやhamlなど少ない記述でビューを記述できるライブラリがある
- ビューでのデータの取得はインスタンス変数を介して行う。
- Rubyの処理を記述する際は<% %><%= %>を利用する
- ビューは小さい単位でパーシャルに分割していく
- パーシャルを利用するこただ再利用性がたかまる。
こちらまとめになります。今回はビューの説明に絞りましたが、実際にRailsを触り始めるとhelperなども使いながら実装していくことになると思います。
その他細々としたことやslimについても、時間ある時に書いていこうかと思います。