When user clicks a specific item, I use jQuery's post method to update something in the database:
$.post("/posts/" + post_id + "/update_something",
{ some_param: some_value },
success_handler);
where update_something
looks like this:
def update_something
post = Post.find(params[:id])
post.update_attributes(:some_field => params[:some_param])
render :nothing => true
end
The problem is if update_attributes
fails, the request still succeeds and success_handler
is executed.
How could I cause the request to fail when update_attributes
fails such that success_handler
won't be executed?
Ajax enables you to retrieve data for a web page without having to refresh the contents of the entire page. In the basic web architecture, the user clicks a link or submits a form. The form is submitted to the server, which then sends back a response. The response is then displayed for the user on a new page.
Use rails-ujs (no jQuery) Making an AJAX POST call with rails-ujs looks identical to making it with jQuery: Rails. ajax({ type: "POST", url: "/things", data: mydata, success: function(repsonse){...}, error: function(repsonse){...} })
Well, you have to add an error handler, and give it an error to handle. So, in your JavaScript:
$.post( "/posts/" + post_id + "/update_something",
{ some_param : some_value }
)
.done( successHandler )
.fail( errorHandler ) // define errorHandler somewhere, obviously
;
And in Rails:
def update_something
post = Post.find params[ :id ]
success = post.update_attributes :some_field => params[ :some_param ]
head success ? :ok : :internal_server_error
end
Note: 500
may or may not be the appropriate error code here—choose whichever among the 400s and 500s is appropriate.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With