2011-08-23 30 views
5

Theo mặc định gọi rails.model.to_jsonLàm cách nào để tùy chỉnh đầu ra json lỗi Rails 3 xác thực?

Sẽ hiển thị một cái gì đó như thế này:

{"name":["can't be blank"],"email":["can't be blank"],"phone":["can't be blank"]} 

Thay vì nhắn tôi cần phải tạo ra một số mã trạng thái mà có thể được sử dụng trên máy khách dịch vụ:

[{"field": "name", "code": "blank"}, {"field": "email", "code": "blank"}] 

Cách tiếp cận này rất giống với lỗi github api v3 - http://developer.github.com/v3/

Làm cách nào tôi có thể đạt được điều này bằng Đường sắt S?

+0

Một câu hỏi tương tự khác. http://stackoverflow.com/questions/5911470/api-errors-customization-for-rails-3-like-github-api-v3. Cũng không có câu trả lời = \ –

+0

Trong chuỗi này, đường ray "Người trả lời" được sử dụng để đạt được điều đó. http://stackoverflow.com/questions/5911470/api-errors-customization-for-rails-3-like-github-api-v3 –

Trả lời

0

Theo mô hình của bạn, bạn có thể sửa đổi đường đi như json hoạt động. Ví dụ, giả sử bạn có một mô hình ActiveRecord Contact. Bạn có thể ghi đè as_json để sửa đổi hành vi hiển thị.

def Contact < ActiveRecord::Base 

    def as_json 
    hash = super 

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

end 

Tất nhiên, bạn cũng có thể tạo phương pháp json theo phương pháp riêng trên Contact hoặc thậm chí trong bộ điều khiển. Bạn sẽ chỉ phải thay đổi phương thức render của bạn một chút.

render @contact.as_my_custom_json 
+0

Giá trị là chuỗi như thế này "Không thể để trống". Có thể có một số cách để có được loại lỗi thay vì tin nhắn. –

+0

Bạn có ý nghĩa gì với loại lỗi? Tất cả các xác nhận hợp lệ đều tăng cùng một lỗi. Khóa là trường gây ra lỗi và giá trị là thông báo. Bạn muốn "mã" trong ví dụ của bạn là gì? – diedthreetimes

+0

Nếu bạn không sử dụng thông báo "Không thể để trống" cho bất kỳ điều gì khác, chỉ cần ghi đè thông báo trong lớp mô hình của bạn để trở thành nội dung bạn muốn. Ví dụ: 'validates_numercality_of: zip_code," 320 "' – diedthreetimes

0

Trong điều khiển của bạn, khi bạn làm cho đầu ra, trong trường hợp nội dung JSON của bạn, thêm những điều sau đây:

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

Hope this helps

+0

Dominic, tôi đã hỏi về vấn đề khác nhau. Xin lỗi nếu câu hỏi của tôi không rõ ràng. –

+0

Và nó vẫn chưa rõ ràng, bởi vì với giải pháp của tôi, bạn có chính xác những gì bạn yêu cầu (http://developer.github.com/v3/). Bạn sẽ có một cái gì đó như: HTTP/1.1 400 Yêu cầu không hợp lệ Nội dung dài: 35 {"nội dung": "Sự cố khi phân tích cú pháp JSON"} –

+0

Có phản hồi với mảng lỗi. Tôi hỏi về nó. –

Các vấn đề liên quan