가장 먼저, 할 일(To-do) 테이블에 프로젝트 ID를 저장하기 위한 데이터베이스 마이그레이션을 수행합니다. bin/rails generate migration AddProjectIdToTodos project:references
명령어를 사용하여 project_id
컬럼을 추가하고, null: false
옵션으로 모든 할 일이 프로젝트에 반드시 연결되도록 강제하며, 외래 키(foreign key) 제약 조건을 설정합니다. 기존 데이터베이스에 할 일이 있을 경우 발생할 수 있는 문제를 방지하기 위해 개발 모드에서는 db:drop
, db:create
, db:migrate
를 통해 데이터베이스를 초기화하는 방법을 제시합니다.
다음으로 모델 간의 관계를 정의합니다. app/models/to_do.rb
파일에 belongs_to :project
를 추가하여 할 일이 프로젝트에 속함을 명시하고, app/models/project.rb
파일에는 has_many :todos, dependent: :destroy
를 추가하여 프로젝트가 여러 할 일을 가질 수 있음을 정의합니다. 특히 dependent: :destroy
옵션은 프로젝트 삭제 시 해당 프로젝트에 속한 모든 할 일도 함께 삭제되어 데이터 잔여물을 방지하는 중요한 역할을 합니다. Rails 콘솔을 통해 새로 정의된 관계가 올바르게 작동하는지 확인하기 위해 프로젝트와 할 일을 생성하고 서로 연결하는 예시를 보여줍니다.
이후 사용자 인터페이스(UI)를 업데이트합니다. 할 일 생성 폼(_form.html.erb
partial)에 completed
체크박스, priority
숫자 필드, 그리고 collection_select
헬퍼를 사용하여 프로젝트를 선택할 수 있는 드롭다운 메뉴를 추가합니다. collection_select
는 모든 프로젝트 레코드를 사용하여 드롭다운을 생성하며, 각 프로젝트의 name
을 표시하고 선택된 프로젝트의 id
를 제출 값으로 사용합니다. 이 과정에서 Action View Helpers Form Builder
의 유용성을 강조하며, Rails의 컨벤션 오버 컨피규레이션(convention over configuration) 철학이 개발을 얼마나 간소화하는지 설명합니다.
폼 제출 시 발생할 수 있는 문제를 해결하기 위해 Strong Parameters의 중요성을 다룹니다. 새로운 필드(completed
, priority
, project_id
)가 컨트롤러의 to_do_params
에 추가되지 않아 데이터가 저장되지 않는 문제를 디버깅하고, 이를 통해 Rails가 보안을 위해 특정 파라미터만 허용하도록 강제하는 메커니즘을 설명합니다.
마지막으로 뷰를 업데이트하여 사용자에게 필요한 정보를 제공합니다. _to_do.html.erb
partial에 할 일의 완료 상태, 우선순위, 그리고 연결된 프로젝트로 이동할 수 있는 링크를 추가합니다. 또한 project_show.html.erb
뷰를 수정하여 해당 프로젝트에 속한 모든 할 일 목록을 표시하고, 각 할 일의 완료 여부를 체크 마크로 시각화하며, 개별 할 일 페이지로 이동할 수 있는 링크를 제공합니다. 이 모든 과정을 통해 애플리케이션이 더욱 연결되고 직관적으로 작동하도록 개선합니다.