Railsのビューとテンプレート
Railsのビューは、ユーザーインターフェースを構築する責務を持ちます。コントローラから渡されたデータを使用して、HTMLなどのレスポンスを生成します。ビューのテンプレートは、app/viewsディレクトリに配置されます。
ERB (Embedded Ruby)
Railsでは、デフォルトでERBというテンプレートエンジンが使用されます。ERBを使用すると、HTMLファイル内にRubyコードを埋め込むことができます。
<%= ... %>: Rubyの式を評価し、その結果を出力します。HTMLエスケープが自動的に適用されます。<% ... %>: Rubyのコードを実行しますが、結果は出力しません。条件分岐やループなどに使用します。
erb
<!-- app/views/posts/index.html.erb -->
<h1>Posts</h1>
<ul>
<% @posts.each do |post| %>
<li>
<%= link_to post.title, post_path(post) %>
</li>
<% end %>
</ul>パーシャル
パーシャルは、再利用可能なビューの断片です。ファイル名の先頭にアンダースコア(_)を付けます(例: _form.html.erb)。
パーシャルをレンダリングするには、renderメソッドを使用します。
erb
<%= render 'form' %>ローカル変数をパーシャルに渡すこともできます。
erb
<%= render 'post', post: @post %>レイアウト
レイアウトは、アプリケーション共通のヘッダーやフッターなど、複数のページで共有されるテンプレートです。レイアウトはapp/views/layoutsディレクトリに配置されます。
application.html.erbがデフォルトのレイアウトファイルです。yieldキーワードがある場所に、各ビューの内容が挿入されます。
erb
<!-- app/views/layouts/application.html.erb -->
<!DOCTYPE html>
<html>
<head>
<title>My App</title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
<%= javascript_importmap_tags %>
</head>
<body>
<header>
<!-- Header content -->
</header>
<main>
<%= yield %>
</main>
<footer>
<!-- Footer content -->
</footer>
</body>
</html>ヘルパーメソッド
Railsには、ビューでよく使われるHTMLタグを生成するためのヘルパーメソッドが多数用意されています。
link_to: ハイパーリンクを生成します。form_with: フォームを生成します。image_tag: 画像タグを生成します。number_to_currency: 数値を通貨形式にフォーマットします。
まとめ
Railsのビューは、ERB、パーシャル、レイアウト、ヘルパーメソッドを組み合わせることで、動的で再利用性の高いユーザーインターフェースを効率的に構築することができます。