요약
리뷰 대기열(/review)에서 모더레이터가 대기 중인 게시물의 태그를 수정한 후 승인을 클릭하면, 승인 요청이 500 Internal Server Error와 함께 실패합니다.
재현 방법
- 리뷰 대기열에 게시물이 있는지 확인합니다(예: 승인이 필요한 사용자/그룹).
/review로 이동합니다.- 대기 중인 항목을 엽니다.
- 태그 선택기 UI를 사용하여 태그를 수정합니다.
- 승인을 클릭합니다.
- 500 응답을 확인합니다.
기대 동작
게시물이 성공적으로 승인되고, 업데이트된 태그가 적용되어야 합니다.
실제 동작
승인이 500 오류와 함께 실패합니다.
예시 요청 패턴:
PUT /review/{id}/perform/approve_post?version={x} → 500 (Internal Server Error)
원인으로 추정되는 사항 (Root Cause)
리뷰 UI에서 태그를 수정한 후, reviewable 페이로드에는 태그 이름 문자열 대신 전체 태그 객체가 저장됩니다.
태그 수정 전:
payload["tags"] = ["tag-one", "tag-two"]
/review에서 태그 수정 후:
payload["tags"] = [
{"id"=>123, "name"=>"tag-one", "description"=>nil, "count"=>50, ...},
{"id"=>456, "name"=>"tag-two", "description"=>nil, "count"=>30, ...}
]
승인 액션이 태그를 처리할 때 문자열을 기대하는 것으로 보이지만, 실제로는 해시/객체를 받아 500 오류가 발생합니다.
우회 방법
태그를 이름으로 다시 정규화합니다:
r = ReviewableQueuedPost.find(ID)
r.payload["tags"] = r.payload["tags"].map { |t| t.is_a?(Hash) ? t["name"] : t }
r.save!
