HTML 폼의 주요 제약 사항
-
중첩 불가: HTML 표준은 form 태그 내부에 다른 form 태그를 배치하는 것을 허용하지 않으며, 브라우저는 이를 무시하거나 제거합니다.
-
HTTP 메서드 제한: HTML 폼은 기본적으로 GET과 POST만 지원하며, Rails는 이를 해결하기 위해 _method라는 숨겨진 필드를 사용합니다.
-
CSRF 보호: 모든 변조 요청에는 보안을 위한 CSRF 토큰이 필수적으로 포함되어야 하며, Rails는 이를 통해 요청의 유효성을 검증합니다.
Turbo 환경에서의 대안 전략
-
버튼별 commit 값 활용: 동일한 폼 내에서 클릭된 버튼에 따라 다른 로직을 수행하려면 버튼의 name과 value를 활용하여 params[:commit]으로 구분합니다.
-
_method 오버로딩: 버튼 자체에 name=’_method’와 value=’delete’ 등을 설정하여 폼 전체의 메서드와 별개로 특정 버튼만 다른 HTTP 메서드를 전송하게 할 수 있습니다.
-
formaction 속성: HTML5의 formaction 속성을 사용하면 버튼 클릭 시 폼의 기본 action URL이 아닌 별도의 URL로 요청을 보낼 수 있어 유연한 처리가 가능합니다.
-
form 속성 활용: 버튼에 form=’form_id’ 속성을 부여하면, 해당 버튼이 물리적으로 폼 내부에 있더라도 지정된 ID를 가진 외부 폼을 제출하도록 유도할 수 있어 중첩 폼 문제를 해결합니다.