📄
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 %> <%# 축약형 (규약에 의해 자동 매핑) %>
컬렉션 렌더링은 partial을 반복 호출하지 않고 한 번에 렌더링하여 성능이 좋습니다.
핵심 포인트
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에서 공유)
리스트 아이템 파셜
에러 메시지 파셜