Cuando el usuario hace clic en un elemento específico, utilizo jQuery's post method para actualizar algo en la base de datos:¿Cómo fallar la solicitud de Ajax en Rails?
$.post("/posts/" + post_id + "/update_something",
{ some_param: some_value },
success_handler);
donde update_something
se parece a esto:
def update_something
post = Post.find(params[:id])
post.update_attributes(:some_field => params[:some_param])
render :nothing => true
end
El problema es que si update_attributes
falla, la solicitud todavía tiene éxito y success_handler
se ejecuta.
¿Cómo puedo hacer que la solicitud falle cuando update_attributes
falla de modo que success_handler
no se ejecute?
Gracias! No estaba familiarizado con los métodos 'success' y' error' de jQuery. Intenté buscar documentos pero no tuve éxito. ¿Podría proporcionar un puntero, por favor? –
+1 También puede devolver un encabezado de éxito/error. Su última línea en Rails se vería como 'éxito de cabeza? : ok:: internal_server_error', donde 'head: ok' devolverá el estado 200, y' head: internal_server_error' devolverá el estado 500. – Substantial
Misha: 'post',' get', y 'ajax' devuelve un objeto jqXHR que es (mal) [documentado aquí] (http://api.jquery.com/jQuery.ajax/#jqXHR). Leyendo ese acercamiento noté que 'error' y' success' están en desuso y ahora debes usar [Deferred] (http://api.jquery.com/category/deferred-object/) 'done' y' fail' . He actualizado mi código para reflejar esto, así como también he incorporado el consejo de @gg_s, que es un buen consejo. –