2012-01-03 2 views
2

안녕하세요. active_resource를 사용하고 있는데 다음 질문이 있습니다. 때로는 검증이 필요 예rails 3 REST : activeresource destroy 유효성 검사

def destroy 
     if @user.destroy 
     head :ok 
     else 
     respond_with(@user) 
     end 
    end 

사용자 모델은 몇 가지 경우에 삭제할 수 없습니다 파괴가있다. 이 @user이 검증 before_delete 및 응답 후 오류가 삭제되지 않은 경우 그 =>{\"errors\":{\"id\":[\"Cannot delete user with orders\"]}}

하지만 active_resource 처리하지 않는 등의 반응처럼 직렬화 및

ActiveResource::ResourceInvalid: Failed. Response code = 422. Response message = . 

가장 좋은 방법은 무엇인가 실패 그런 상황을 다루는가?

답변

1

지금까지 ActiveResource를 사용한 적이 한번도 없지만 이것이 파괴 방법을 구현하는 올바른 방법이라고 생각합니다. 적어도 REST 방법입니다.

당신은 ActiveResource가 그런 응답을 처리하지 못하지만 실제로는 그 반대입니다. ActiveResource :: ResourceInvalid 오류는 422 (Unprocessable Entity) 응답으로 인해 발생합니다. 여기

더 많은 정보를 정기적으로 :

다음 HTTP 응답 코드가 이러한 예외가 발생합니다 :

...

여기 API ActiveResource

자원 오류 부분의 말씀입니다

422 - ActiveResource :: ResourceInvalid (유효성 검증 오류로 저장하여 구출)

요약하면 이러한 오류는 반환 된 상태 코드에 따라 정확하게 처리하고 동작 할 수 있도록합니다. 예를 들어 응답이 503 (Service Unavailable)인지 422 (Unprocessable Entity)인지와 같은 방식으로 작동하지 않습니다. 첫 번째 경우에는 "나중에 다시 시도하십시오"라고 말하고 두 번째 경우에는 "[메시지가 반환되었으므로] 수행 할 수 없습니다"라고 말합니다.

2

그래서이 방법을했다

module ActiveResource 

    class Base 
    def destroy_with_validation 
     begin 
      destroy 
      rescue ActiveResource::ResourceInvalid=>error 
      @remote_errors = error 
      load_remote_errors(@remote_errors, true) 
      return false 
      end  
     end 
end