form_for의 과거와 한계
form_for는 Rails 2.0부터 10년 이상 모델 기반 폼 구축의 핵심이었으나, AJAX, Hotwire 등 현대 웹 환경의 동적 요구사항 충족에 한계를 보였습니다. Rails 7.0에서 form_for와 form_tag는 공식적으로 사용 중단되었습니다.
form_with의 등장과 주요 특징
Rails 5.1에 도입된 form_with는 form_for와 form_tag 기능을 통합한 통일된 API로, 더 유연하고 현대적인 폼 처리를 제공합니다. 주요 특징은 다음과 같습니다:
-
통합 API:
model:또는url:옵션으로 모델 기반 및 URL 전용 폼 모두 처리. -
원격(Ajax) 기본:
local: false를 명시적으로 설정하여 로컬 제출. -
Hotwire 호환: Turbo Drive, Turbo Streams, Stimulus와 원활하게 연동.
-
명시적 옵션:
multipart: true와 같이 HTML 옵션을 간결하게 지정.
form_for에서 form_with로의 마이그레이션
레거시 코드를 form_with로 전환하는 과정은 대부분 기계적입니다. 핵심 변경사항은 다음과 같습니다:
-
form_for(@obj)->form_with(model: @obj) -
remote: true->local: false -
form_tag->form_with(url: ...) -
html: { multipart: true }->multipart: trueform_with는 기본 모델 기반, URL 전용, Ajax/Turbo 폼, 파일 업로드 등 다양한 폼 패턴에 적용됩니다.
사용 중단 및 모범 사례
form_for는 Rails 7.0에서 사용 중단되었으며, 7.1+ 버전에서는 제거될 예정입니다. 따라서 모든 폼에 form_with를 사용하고, model: 옵션을 선호하며, Turbo와 함께 local: false를 활용하는 것이 현대 Rails 개발의 모범 사례이자 필수적 마이그레이션입니다.