본문에서는 Turbo를 이용한 동적 테이블 구현 시 발생하는 주요 문제점과 그 해결책을 단계별로 설명합니다.
1. 새로운 행 추가 시 렌더링 문제
- 문제점:
turbo_stream.prepend
와turbo_frame_tag
를<tbody>
에 함께 사용할 경우, Turbo가<turbo-frame>
태그로 콘텐츠를 감싸면서 테이블 구조가 깨져 새로운 행이 테이블 외부에 렌더링됩니다. - 해결책:
<tbody>
태그에id="articles_table"
와 같이 직접 ID를 부여하고,turbo_frame_tag
를 제거합니다.ArticlesController
에서는turbo_stream.prepend(:articles_table, ...)
를 사용하여 이 ID를 직접 타겟팅합니다.
2. 인플레이스(In-place) 편집 시 렌더링 및 폼 제출 문제
- 문제점:
- 초기 렌더링: 개별
<tr>
에turbo_frame_tag
를 사용할 경우, 편집 폼이<tr>
외부에 렌더링되어 HTML 구조가 유효하지 않게 됩니다. - 폼 제출:
form_with
내 폼 요소들이<tr>
내부에 올바르게 포함되지 않아 폼 제출이 작동하지 않습니다.
- 초기 렌더링: 개별
- 해결책:
- 행 ID: 각
<tr>
태그에dom_id(article)
헬퍼를 사용하여 고유 ID를 부여합니다.ArticlesController
의edit
및update
액션에서turbo_stream.replace(article, ...)
로 이 ID를 타겟팅합니다. - 폼 구조: HTML5 원격 폼 기능을 활용합니다.
form_with
에 고유id
를 부여하고, 모든 입력 필드 및 제출 버튼에form: form_id
속성을 명시적으로 연결하여 폼 요소들이 논리적으로 연결되도록 합니다.
- 행 ID: 각
이러한 접근 방식을 통해 동적 테이블에서 Turbo의 잠재력을 최대한 활용하면서도 발생할 수 있는 일반적인 문제들을 효과적으로 해결할 수 있습니다.