피드로 돌아가기
Dev.toBackend
원문 읽기
Rails 엔진 개발자가 ERB 템플릿에서 Phlex 컴포넌트를 raw component.call 방식으로 렌더링하여 뷰 계층을 통합했다
Building a Rails Engine #15 -- ERB Views Meet Phlex Components
AI 요약
Context
DataPorter Rails 엔진은 완전한 백엔드와 Phlex 컴포넌트 라이브러리를 갖추었다. 그러나 app/views/data_porter/imports/ 디렉토리가 비어 있어 /imports 경로 접속 시 ActionView::MissingTemplate 오류가 발생한다.
Technical Solution
- DataImport 모델에 has_one_attached :file 선언을 추가하여 ActiveStorage 연동을 활성화했다
- belongs_to :user에 optional: true 옵션을 적용하여 엔진이 사용자 연관을 강제하지 않도록 했다
- 테스트 인프라를 15줄의 수동 requires에서 Rails.application.initialize! 기반 전체 Rails 앱 부트스트랩으로 전환했다
- Rails.application.initialize!를 DB 연결 설정 후, 스키마 정의 전에 실행하여 ActiveStorage 모델 등록이 정상적으로 이루어지도록 했다
- ERB 템플릿에서 raw DataPorter::Components::StatusBadge.new(status: @import.status).call 패턴으로 Phlex를 렌더링했다
- ViewTestHelper 모듈로 ActionView::Base.with_empty_template_cache와 엔진 라우트 설정을 캡슐화했다
Key Takeaway
phlex-rails 젬 의존성 없이 .call 메서드로 Phlex 컴포넌트를 ERB에서 렌더링하면 호스트 앱과의 버전 충돌 위험이 제거된다
실천 포인트
Rails 엔진 환경에서 ERB와 Phlex를 통합할 때 raw component.call 패턴을 적용하면 별도 젬 설치 없이 뷰 컴포넌트를 사용할 수 있다