2011-08-23 5 views
5

는 다음과 같이 표시됩니다 :Rails 3 유효성 검사 오류 json 출력을 어떻게 사용자 정의 할 수 있습니까? 기본 호출 rails.model.to_json</p> <p>으로

[{"field": "name", "code": "blank"}, {"field": "email", "code": "blank"}] 
: 내가 서비스 클라이언트에서 사용할 수있는 몇 가지 상태 코드를 생성 할 필요가 대신 메시지의
{"name":["can't be blank"],"email":["can't be blank"],"phone":["can't be blank"]} 

이 접근법은 github api v3 오류와 매우 유사합니다. - http://developer.github.com/v3/

Rail 에스? 컨트롤러에서

+0

또 다른 비슷한 질문입니다. http://stackoverflow.com/questions/5911470/api-errors-customization-for-rails-3-like-github-api-v3. 또한 응답 없음 = \ –

+0

이 스레드에서 레일 "응답자"는이를 달성하는 데 사용됩니다. http://stackoverflow.com/questions/5911470/api-errors-customization-for-rails-3-like-github-api-v3 –

답변

0

을하는 데 도움이됩니다. 예를 들어 ActiveRecord 모델 Contact이 있다고 가정 해 보겠습니다. 렌더링 동작을 수정하려면 as_json을 무시할 수 있습니다.

def Contact < ActiveRecord::Base 

    def as_json 
    hash = super 

    hash.collect {|key, value| 
     {"field" => key, "code" => determine_code_from(value)} 
    } 
    end 

end 

은 물론, 당신은 또한 Contact에 또는 컨트롤러에 별도의 방법에서 JSON을 생성 할 수 있습니다. 렌더링 메소드를 약간 변경해야합니다.

render @contact.as_my_custom_json 
+0

값은 "비워 둘 수 없습니다."와 같은 문자열입니다. 메시지 대신 오류 유형을 얻을 수있는 방법이 있습니다. –

+0

오류 유형은 무엇을 의미합니까? 모든 유효성 검사는 동일한 오류를 발생시킵니다. 키는 오류의 원인이되는 필드이며 값은 메시지입니다. 당신의 예에서 "코드"는 무엇을 원합니까? – diedthreetimes

+0

"공백으로 표시 할 수 없습니다"라는 메시지를 사용하지 않는 경우 모델 클래스의 메시지를 재정의하여 코드를 원하는 것으로 만듭니다. 예를 들어,'validates_numercality_of : zip_code, "320"' – diedthreetimes

0

, 당신은 출력을 렌더링 할 때, 귀하의 경우 JSON 내용에 다음을 추가

render :json => @yourobject, :status => 422 # or whatever status you want. 

희망이 JSON 작동 당신이 방법을 수정할 수 있습니다 모델에

+0

도미니크, 나는 다른 문제에 대해 물었다. 미안하지만 질문이 명확하지 않은 경우. –

+0

그리고 내 솔루션으로 당신이 요구 한 바를 정확히 알 수 있기 때문에 여전히 불분명합니다 (http://developer.github.com/v3/). HTTP/1.1 400 잘못된 요청 콘텐츠 길이 : 35 { "message": "JSON 구문 분석 문제"} –

+0

오류 배열과 함께 응답이 있습니다. 나는 그것에 대해 묻고있다. –