Skip to main content

Ruby on Rails 5 - 204 No Content - Why this change makes sense for you?

Note: This is a change that is present in the latest Rails version 5. Versions before the 5 will throw an error "MissingTemplate" exception.


In Ruby on Rails 5, there is a change that is particularly important. Rails server issues a HTTP code of 204 No Content when you request a POST method without a template but the action for the same is present. This happens only when the HTTP Verb is POST and it doesn't happen for GET requests.

This is the sample code for the action which will be called as POST:


def create

  @user = User.new(params[:user])

end

So how does this help you?

  1. Now you can write your own POST actions which can be called via Ajax calls which will automatically get a success response because of the 204 http code and you can let your javascript handle the changes on the UI.
  2. GET via browser will throw an error. This is because Rails assumes that you have to have a template for showing some content to the user.

Any disadvantages?

  1. Your html page after the POST request will be still the same and the page won't transition to a new page. This means that it will look like nothing has been done by the server and the user might be confused if its a form POST.


Thanks for your support and appreciation.

You can also follow me at Twitter, Facebook, LinkedIn and Website.

Comments

Rathnam said…
I was wondering why. This answered it. thanks...

Featured

Installation of rvm erroring out in Catalina - Ruby 2.3.x - How to solve them?

If you had recently updated your macOS to Catalina and then faced problem with installing certain versions of ruby because of random error, pls try the following.
If you are getting the following error, while doing a rvm install
Error running '__rvm_make -j8',
Try the following:
Possiblility is that because of openssl 1.1. OpenSSL 1.1 is not compatible with the ruby compilation during the rvm install.
First install openssl 1.0 using macports
$ sudo port install openssl10
Now install (reinstall) the ruby using rvm with openssl pointing to the macports version
$ PKG_CONFIG_PATH=/opt/local/lib/openssl-1.0/pkgconfig rvm reinstall 2.3.7 --with-openssl-lib=/opt/local/lib/openssl-1.0 --with-openssl-include=/opt/local/include/openssl-1.0
Just ensure that the openssl from macports is installed into /opt/local/lib/openssl-1.0
Hope this helps.
Talk to me on TwitterFacebookLinkedIn or Website