When user clicks a specific item, I use jQuery\'s post method to update something in the database:
$.post(\"/posts/\" + post_id + \"/update_something\",
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.
You can either do render :status => 400
(or some other error code) in Rails, which will trigger the error
callback of $.ajax()
, or you can render some JSON with an error message:
render :json => { :success => false }
Then in your success_handler
function you would:
function success_handler (response) {
if (response.success) {
// do stuff
}
}
Edit:
Oh, and update_attributes
returns false when it fails. So you can render your response based on that.
Edit 2 years later:
After a couple years and seeing that this has a few upvotes, I'd highly recommend using the status: 400
method instead of rendering 200
. It's what the error
handler in AJAX requests are for, and should be used that way.