PostRevisor 블록에서 오류를 발생시키고 사용자에게 표시하는 방법?

추가 검증을 추가하고 싶은 코드가 있습니다.

(간단화된 코드 및 사용 사례)

# prevent non-staff from changing category on a topic
  PostRevisor.track_topic_field(:category_id) do |tc, category_id|
    if tc.guardian.is_staff?
      tc.record_change('category_id', tc.topic.category_id, category_id)
      tc.topic.category_id = category_id
    else
       tc.topic.errors[:base] << "you can't change category on a this kind of topic"
    end
  end

이 코드는 비스태프가 카테고리를 변경하는 것을 방지하지만, 에러가 버블 업(bubble up)되지 않습니다.

이전에는 이렇게 작동했습니다:

하지만 해당 플러그인은 이후 아카이브되었습니다.

이러한 요구 사항은 API에서 당연히 지원되어야 하지 않나요?

이 부분은 제가 당신보다 잘하는 것 같습니다. 하지만 Rails가 이를 다시 전달할 필요가 없다고 생각합니다. Ember는 사용자가 선택할 수 없는 카테고리를 선택하지 못하도록 막을 것으로 기대하기 때문입니다. 따라서, 사용자가 변경할 수 없는 카테고리인 경우 프론트엔드에서 카테고리 변경을 막아 PostRevisor가 이러한 불편한 상황에 직면하지 않도록 하는 것이 어떨까요?

네, 맞습니다. 그건 고려할 사항이죠.

가능하다면 먼저 API 레벨에서 제한을 걸고, 그 다음에 프론트엔드에서 제한을 거는 것이 좋은 관행입니다. 즉, 불법적인 행위를 막기 위해 프론트엔드에만 의존해서는 안 됩니다.

또한, 프론트엔드는 Active Record 에러를 사용자에게 보여줘야 합니다.

따라서 이 작업을 API 레벨에서 수행하는 것이 중요합니다.

동의합니다. Rails가 이를 강제 적용하도록 해야 합니다.

요구 사항을 강제하고 변경을 거부하되, 프론트엔드에 충분한 수준의 오류 메시지를 제공하지 않는다고 이해하고 있었습니다.

네, 맞습니다.

저는 카테고리 변경만 막으려는 건데, UI가 모든 메타데이터를 변경하거나 전혀 변경하지 못하도록 설계되어 있어서 이 부분에서 도움이 안 됩니다.

따라서 버블업된 오류 메시지가 있으면 정말 유용할 것 같습니다.

.gjs 템플릿의 경직성 때문에 이런 종류의 변경이 지금은 매우 까다롭습니다.

이 템플릿은 여전히 hbs지만, 명백한 이유로 오버라이드하고 싶지 않습니다.

CSS 해킹을 시도해 보겠습니다.

다시 말하지만, 그 부분은 저보다 더 잘하시지만, 카테고리 선택기를 숨기는 것이 가능할 것 같긴 한데 그렇게 해서는 안 될 것 같습니다.

그러니 카테고리 직렬화기(serializer)를 해킹해서 카테고리를 보내지 않도록 하는 것이 좋을 것 같습니다. 다만, 주제를 만드는 것이 아니라 수정할 때만 해킹해야 하므로 꽤 까다로울 수 있습니다.

„Hack“가 작동했습니다 :tada: :

여전히 서버에서 상세하고 합리적인 응답을 원합니다. 특히 Active Record를 활용한 응답을 원합니다.

저도 같은 현상을 겪었고, 원인을 찾지 못해 막막했습니다. 아직 프론트엔드가 없어서 모든 개발과 테스트를 API 요청으로 하고 있었는데, 성공처럼 보이는 응답을 받자 당황했습니다. 가드(guard)가 아예 작동하지 않는 줄 알고 최소한의 디버거를 짜서 스테퍼를 통해 겨우 디버깅을 진행했습니다.

수정:
음… 환경을 완전히 재시작해 봤더니 API 응답에 오류 메시지가 반환되기 시작했습니다.