Rails 5 Features, I'm Excited About
Ruby on Rails 5 has arrived. Though, I don't care much about the big features. I'm more excited about the smaller features, which would not change my life, but will make it a bit easier.
API mode improvements
Most of my work in Rails projects, these days is just using Rails as an api endpoint. There are lots of improvements.
I'm really glad we finally got ActionController::API.
Easier conversion of errors to JSON
Returning consistent and usable error messages is vital when designing and API.
Previously getting usable validation errors from rails was quite painful. Since you can only have:
user.errors.messages # => {:email=>["can't be blank"]}
This error message is it quite hard for clients. In several projects, I have defined a json locale where things like "can't be blank" is just "blank" and used that for the api.
But this is no more! Since errors.details exists now:
user.errors.details # => {:email=>[{:error=>:blank}]}
Better exceptions in development
Speaking about errors. There is a new option debug_exception_response_format:
# config/environments/development.rb
config.debug_exception_response_format = :api
You will get exception information in JSON format during development, instead of HTML.
ActiveJob improvements
In a previous post - Retrying ActiveJob, there was a glue code depending on a Rails 5 feature - ActiveJob::Base#deserialize. Now that can be removed.
Also having the ApplicationJob makes including the ActiveJobRetriesCount
from the post easier:
class ApplicationJob < ActiveJob::Base
include ActiveJobRetriesCount
end
ActiveRecord improvements
And even more
There is, even more, stuff like redirect_back or ActiveModel::AttributeAssignment. But for more information I encourage you to check:
Overall I think this is a solid release.
I have heard on The Bike Shed that there are discussions about changing the release process and to smaller and more frequent release cycle. I think this would be great. Especially since the features, I'm mostly excited usually are smaller and don't require a major version change.