[통독-2] 성경 읽기 페이지 + 일괄 완료 처리
ID: 1424b0ac-967f-4bf0-b244-1279f9e0a17f
## 목표
선택된 성경 장들의 본문을 표시하는 읽기 페이지와, 읽기 완료 후 일괄 저장 기능 구현
## 현재 상태
- TongtokController: index 액션만 있음
- BibleReadingsController: create(단일), destroy(단일) 만 있음
- bible_passage_controller.js: 성경 본문 파싱/렌더링 Stimulus 컨트롤러 (이미 존재)
- public/data/bible/books/*.json: 66권 성경 JSON 데이터 (이미 존재)
- BibleReadingLog 모델: user_id, book_name, chapter, read_date
## 구현 내용
### 1. 라우트 추가
config/routes.rb에 추가:
```ruby
get "tongtok/read", to: "tongtok#read"
post "bible_readings/batch", to: "bible_readings#batch_create"
```
### 2. TongtokController#read 액션
```ruby
def read
# params[:selections] = "창세기:1,2,3;출애굽기:1,2"
@selections = parse_selections(params[:selections])
if @selections.empty?
redirect_to tongtok_path, alert: "읽을 장을 선택해주세요."
return
end
end
```
- parse_selections 헬퍼: "창세기:1,2,3;출애굽기:1,2" → [{book_name: "창세기", chapters: [1,2,3]}, ...]
### 3. 읽기 뷰 (app/views/tongtok/read.html.erb)
- 상단: 뒤로가기 버튼 (← 통독 현황)
- 선택된 장 요약 (예: "창세기 1-3장, 출애굽기 1-2장")
- 각 장별 성경 본문:
- 기존 bible_passage_controller.js를 활용
- 각 장을 div[data-controller="bible-passage"][data-bible-passage-passage-value="창세기 1장"] 으로 렌더링
- 장 간 구분선
- 맨 아래: "통독 완료" 버튼 (sticky)
- 맨 위로 스크롤 버튼
### 4. BibleReadingsController#batch_create 액션
```ruby
def batch_create
chapters = JSON.parse(params[:chapters])
# chapters = [{"book_name": "창세기", "chapter": 1}, ...]
chapters.each do |ch|
current_user.bible_reading_logs.find_or_create_by(
book_name: ch["book_name"],
chapter: ch["chapter"],
read_date: Date.current
)
end
redirect_to tongtok_path, notice: "#{chapters.size}장 통독 완료!"
end
```
### 5. 통독 완료 처리 (Stimulus)
- app/javascript/controllers/tongtok_reader_controller.js 생성
- "통독 완료" 버튼 클릭 시:
- 선택된 장 정보를 hidden field에 담아 POST /bible_readings/batch 전송
- 완료 후 통독 현황 페이지로 리다이렉트
### 6. 테스트
- test/controllers/tongtok_controller_test.rb에 read 액션 테스트 추가:
- 선택 없이 접근 시 리다이렉트
- 정상 선택 시 페이지 렌더링
- test/controllers/bible_readings_controller_test.rb에 batch_create 테스트 추가:
- 다중 장 일괄 저장
- 중복 저장 방지
## 디자인 참고
- 읽기 페이지는 깔끔한 읽기 모드 (책 읽듯이)
- 본문 텍스트: text-body leading-relaxed
- 절 번호: sup 태그로 작게 표시
- 장 제목: text-heading font-semibold border-b
- 플로팅 "통독 완료" 버튼: sticky bottom, bg-brand-primary text-white
## 담당 파일 (다른 파일 수정 금지)
- config/routes.rb (수정 - 2줄 추가)
- app/controllers/tongtok_controller.rb (수정 - read 액션 + parse_selections)
- app/controllers/bible_readings_controller.rb (수정 - batch_create 액션)
- app/views/tongtok/read.html.erb (생성)
- app/javascript/controllers/tongtok_reader_controller.js (생성)
- test/controllers/tongtok_controller_test.rb (수정)
- test/controllers/bible_readings_controller_test.rb (수정)
## 완료 기준
- /tongtok/read?selections=창세기:1,2 접근 시 성경 본문 표시
- 선택 없이 접근 시 리다이렉트
- "통독 완료" 클릭 시 선택한 장들이 BibleReadingLog에 저장
- 저장 후 통독 현황 페이지로 리다이렉트 + 성공 메시지
- 기존 테스트 깨지지 않을 것
- 새 테스트 통과
첨부 이미지
이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)
JPEG, PNG, GIF, WebP / 최대 10MB
활동 로그
-
팀팀리드 상태 변경: 리뷰 → 완료
2026년 03월 02일 10:23:11
-
Ttongtok-reader 성경 읽기 페이지 + 일괄 통독 완료 처리 구현 완료
2026년 03월 02일 10:21:04
상세 보기
## 수정/생성 파일
### 수정
- `config/routes.rb` - `tongtok/read` GET, `bible_readings/batch_create` POST 라우트 추가
- `app/controllers/tongtok_controller.rb` - `read` 액션 + `parse_selections` private 메서드 추가
- `app/controllers/bible_readings_controller.rb` - `batch_create` 액션 추가 (일괄 저장)
- `test/controllers/tongtok_controller_test.rb` - read 관련 테스트 6개 추가
- `test/controllers/bible_readings_controller_test.rb` - batch_create 관련 테스트 6개 추가### 생성
- `app/views/tongtok/read.html.erb` - 성경 읽기 뷰 (bible_passage_controller.js 활용)## 주요 기능
- `GET /tongtok/read?selections=창세기:1,2,3;마태복음:1` → 성경 본문 렌더링
- 선택 없이 접근 → 통독 현황으로 리다이렉트
- `POST /bible_readings/batch_create` → BibleReadingLog 일괄 저장 (find_or_initialize_by로 중복 방지)
- 저장 후 통독 현황 페이지로 리다이렉트 + 성공 메시지
- 플로팅 "통독 완료" 버튼 (선택된 장 수 표시)## 테스트 결과
- 446 runs, 1069 assertions, 0 failures, 0 errors
- 신규 테스트 12개 모두 통과 -
Ttongtok-reader 상태 변경: 진행 중 → 리뷰
2026년 03월 02일 10:20:53
-
Ttongtok-reader 티켓 클레임 완료
2026년 03월 02일 10:17:31