2010-03-22 15 views
8

Tôi đã chỉnh sửa tại chỗ trên một trang trong ứng dụng của mình (sử dụng Rails 2.3.5 và jQuery). Tôi muốn biết cách hiển thị lỗi trên trang khi cập nhật không thành công.Cách hiển thị lỗi máy chủ trong Rails 2.3.5 với JSON và jQuery

Tôi đang sử dụng ajax (một XMLHttpRequest) để lưu bản cập nhật vào đối tượng Nhận xét. Bộ điều khiển có phương thức cập nhật như sau:

def update 
    @comment = Comment.find(params[:id]) 
    respond_to do |format| 
    # if @comment.update_attributes!(params[:comment]) 
    if false #deliberately forcing a fail here to see what happens 
     format.json { render :nothing => true } 
    else 
     format.json { render :json => @comment.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

Trong Firebug, tôi có thể thấy máy chủ trả về "422" (mã trạng thái lỗi xác thực hợp lệ). Nhưng đó là một phản hồi đối với một XMLHttpRequest vì vậy không có chuyển hướng đến một trang lỗi.

Tôi nghĩ rằng tôi thực sự muốn làm điều này:

format.json { render :json => @comment.errors} 

hoặc có lẽ đây:

format.json {render :json => { :status => :error, :message => "Could not be saved" }.to_json, :status => 400 } 

và kích hoạt một số chức năng Javascript đó lặp qua (và hiển thị) bất kỳ lỗi nào.

Tôi đang sử dụng plugin đường ray REST in Place để triển khai chỉnh sửa tại chỗ. Dường như không có bất kỳ chức năng gọi lại nào để xử lý lỗi. Những lựa chọn của tôi là gì? Tôi có thể viết một số Javascript để đáp ứng với một điều kiện thất bại mà không cần hack các plugin? Tôi có phải hack plugin rest_in_place để xử lý tình trạng lỗi không? Có một plugin tốt hơn (cho Rails hoặc jQuery) xử lý chỉnh sửa tại chỗ, bao gồm cả điều kiện thất bại không?

CẬP NHẬT

bài này từ Peter Bùi Standard JSON Response for Rails and jQuery là hữu ích trong việc cho thấy làm thế nào để xử lý một thông báo lỗi từ máy chủ sử dụng XMLHttpRequest.status. Tôi đã xem xét việc triển khai blog của anh ấy bằng ajax paydro-talks. Tôi ngạc nhiên trước sự phức tạp cần thiết để xử lý một điều kiện lỗi đơn giản. Thông thường Rails có tất cả sự tốt đẹp được nướng nhưng có vẻ như lỗi máy chủ với JSON nằm ngoài phạm vi. Đó có thể là?

Tôi cũng đã xem xét số validatious-on-rails của grimen để xác thực các mô hình hợp lệ khi sử dụng XMLHttpRequest ajax. Nó không rõ ràng với tôi như thế nào tôi sẽ sử dụng nó để xử lý các trường hợp chung của một "tiết kiệm" thất bại khi xác nhận thành công.

+0

Bạn đã bao giờ kết thúc vá jquery.rest_in_place.js để hỗ trợ kiểm chứng thực? Hay bạn đã kết thúc việc nghỉ ngơi tại chỗ? –

+0

Tôi đã từ bỏ plugin rest_in_place Rails của janv. Tác giả thừa nhận rằng hỗ trợ cho việc xác nhận là cần thiết và mất tích. Tôi đã thử một plugin Rails khác để chỉnh sửa tại chỗ, jintastic của rubymood, nhưng không thể làm cho nó hoạt động theo cách tôi muốn. Cuối cùng, tôi đã sử dụng plugin jQuery jquery_jeditable của tuupola trực tiếp trong ứng dụng Rails của tôi (không có gem hoặc plugin Rails). Tôi tìm thấy một ví dụ thực hiện tốt (với một trợ giúp xem hữu ích) trong dự án sadhana của lperichon. –

Trả lời

1

Tôi nghĩ rằng lựa chọn tốt nhất của bạn có thể là chỉ cần hack các plugin trong trường hợp này, vì nó thực sự là ngu ngốc mà các plugin không có một trình xử lý lỗi anyway. gợi ý: có thể nói với tác giả của plugin rằng nó sẽ được tốt đẹp và hữu ích để xử lý lỗi (nếu kết nối thất bại hoặc bất cứ điều gì? Plugin sẽ không bao giờ biết và không có phản hồi cho người dùng).

Nó nên là đủ nếu bạn thêm một cái gì đó như thế này khoảng dòng 33 trong jquery.rest_in_place.js sau khi lựa chọn thành công

"error": function(xhr, state, error) { 
    //do error handling here e.g. 
    alert(state); 
    //or $.parseJSON(xhr.responseText) and whatever or similar 
} 
+1

Tôi đã gửi email cho tác giả của plugin tuần trước và không có trả lời :-( Tôi đã thử những gì bạn đã đề xuất nhưng không thành công với phương pháp này cho đến nay. –

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