📄
ERB & Partials
HTML内にRubyを挿入し再利用可能な部品に分離
ERB構文:
<%= expression %> ← 出力(結果をHTMLに挿入)
<% code %> ← 実行のみ(出力なし)
<%# comment %> ← コメント
<%== raw_html %> ← HTMLエスケープなしで出力
Partial(パーシャル):
ファイル名が_で始まるビューファイルです。
<%# app/views/posts/_post.html.erb %>
<div class="post">
<h2><%= post.title %></h2>
<p><%= post.content %></p>
</div>
<%# 使用 %>
<%= render 'post', post: @post %> <%# 単一レンダ %>
<%= render partial: 'post', collection: @posts %> <%# コレクションレンダ %>
<%= render @posts %> <%# 省略形(規約により自動マッピング) %>
コレクションレンダリングはパーシャルを繰り返し呼び出さず一度にレンダリングするためパフォーマンスが良いです。
キーポイント
1
<%= %> — Ruby式の結果をHTMLに出力(自動エスケープ)
2
<% %> — Rubyコード実行のみ(if、each等の制御文)
3
_partial_name.html.erbファイル生成(アンダースコアで開始)
4
render "partial_name"またはrender partial: "name", locals: { ... }
5
render @collection — コレクションの各項目に対しパーシャル自動反復
6
render "shared/header" — 他フォルダのパーシャルもレンダ可能
メリット
- ✓ HTML内で自然にRubyを使用
- ✓ Partialでコード再利用(DRY)
- ✓ コレクションレンダリングでパフォーマンス最適化
- ✓ ローカル変数でパーシャルにデータ渡し
デメリット
- ✗ ERBタグが多いと可読性低下
- ✗ パーシャルが小さすぎるとファイル管理が複雑
- ✗ ロジックがビューに入ると保守が困難
- ✗ HelperやDecoratorパターンへの分離が必要
ユースケース
共通UI部品(ヘッダー、フッター、ナビゲーション)
フォームパーシャル(new/editで共有)
リストアイテムパーシャル
エラーメッセージパーシャル