📄

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에서 공유) 리스트 아이템 파셜 에러 메시지 파셜