2. RELEASE DATE
• Rails 5.0.0.beta1 was released 18. December 2015
• We don’t know when the final version will come
• Rails 4.0.0.beta1 - 26. February 2013
• Rails 4.0.0.rc1- 1. May 2013 (2 months after beta1)
• Rails 4.0.0 Final - 25. June 2013 (4 months after beta1)
3. RUBY 2.2.2 OR HIGHER
• Symbol garbage collector (no more Symbol DDoS,
no more being extra careful)
• Incremental GC
• Module#prepend
• Keyword arguments
4. UPDATES
• Bugfixes only for Rails 4.2.x and 5.x
• Rails 4.1.x and lower will not be supported
anymore
6. DEPRECATED CODE
REMOVED
• ActiveRecord
• protected_attributes completely unsupported
now (the old attr_accessible)
• activerecord-deprecated_finders completely
unsupported, but who was still using that anyway
(find(:all, conditions: { … }))
7. DEPRECATED CODE
REMOVED
• ActionPack
• some test helpers for testing controllers were
moved into a gem rails-controller-testing
• assert_template
• assigns
10. RAILS COMMAND
• You can now call rake tasks via the rails command
• e.g. rails db:migrate
• Who cares
• Maybe easier for big noobs
• Don’t like too much
13. TURBOLINKS
• If you are already using Rails 5 (master), you might
still be usingTurbolinks 2
14. TURBOLINKS 5
• It has native iOS and Android wrapper implementations. Supposedly so
if you use a WebView in a native app you can useTurbolinks.
• So basically useful for hybrid native apps.
• It also implements partial updates and uses some HTML5 (data-*)
attributes to make things easier.
• Who cares? Probably only Basecamp.
• I don’t know why this is part of Rails.
Probably because Basecamp.
15. MINITEST RUNNER
• Basically add a bunch of features to minitest runner command, that rspec already has
since like forever.
• Run a single test file, or specify line. Had for years in rspec.
• Run multiple test files. Had for years in rspec.
• Color output. Had for years in rspec.
• Fail fast. Had for years in rspec.
• Etc…
• Do I care? No… At least Rails core development will be easier. But they could just
switch to rspec.
18. HAS_SECURE_TOKEN
• good idea but not that great implementation (unreliable)
• it uses SecureRandom with Base58 to generate a 24-char token.
class Invite < ActiveRecord::Base
has_secure_token :invitation_code
end
invite = Invite.new
invite.save
invite.invitation_code # => 44539a6a59835a4ee9d7b112
invite.regenerate_invitation_code # => true
20. BETTER PERFORMANCE
• Lots of work done here, e.g. freezing strings
• Development mode now uses evented FS
monitor, which is much faster than checking all files
if they were updated, as it worked in Rails 4
21. RAILS-API
• rails new name --api
• active_model_serializers
• more or less works just like rails-api worked
• it’s nice that the core rails team will be working on
this
22. ACTIONCABLE
• It’s basically like Heroku pusher - websockets, push server…
• Uses parts of faye-websocket and concurrent-ruby
(threading lib)
• Similar to faye, you subscribe to channels and then receive
events in JS when new messages arrive.
• It might not sound that useful but it actually has a lot of use
cases
23. ACTIONCONTROLLER::RENDERER
• Refactor of ActionController
• It makes it much easier to render templates outside of controllers
(useful in delayed jobs and for ActionCable)
• ApplicationController.render ‘sample/index'
• ApplicationController.render assigns: { rails: 'Rails' }, inline: '<%= "Hello
#{@rails}" %>’
• Makes this much easier when you need it. Before we had to do crazy
stuff with AbstractController::Base
24. ACTIVERECORD ATTRIBUTES
• Basically allows you to define coercion rules for attributes.
• It also works for virtual attributes.
• It’s not that big of a deal, we could just define a getter and
setter method to achieve the same thing.
• But it is nice and may play with the framework better
than just defining attribute accessor methods.
25. ACTIVERECORD ATTRIBUTES
class Book < ActiveRecord::Base
end
book.quantity # => 12.0
class Book < ActiveRecord::Base
attribute :quantity, :integer
end
book.quantity # => 12
class Product < ApplicationRecord
attribute :price_in_cents, MoneyType.new
end
class MoneyType < ActiveRecord::Type::Integer
def type_cast(value)
# convert values like '$10.00' to 1000
end
end
product = Product.new(price_in_cents: '$10.00')
product.price_in_cents #=> 1000
26. APPLICATIONRECORD
• Now controllers inherit from ApplicationRecord
instead of ActiveRecord::Base
• Basically just so ActiveRecord::Base monkey-
patching won’t have to be done, instead you do
that in ApplicationRecord now, so if some gems
use ActiveRecord::Base they won’t be affected by
the monkey-patches.
27. ACTIVERECORD OR
• Finally we can use “or” in ActiveRecord
• Unfortunately the API is a bit stupid imo
• I prefer how it’s done in Sequel
Book.where('status = 1').or(Book.where('status = 3'))
Book.where(Sequel.or(status: 1, name: "Book"))
Book.where { |t| { t.status => 1 } | { t.name => "Book" } }
29. BELONGS_TOVALIDATION
• By default, when you have a belongs_to
association you will automatically get a presence
validation for it
• You can explicitly make it optional:
class Book < ActiveRecord::Base
belongs_to :author, optional: true
end
30. ACTIVERECORD HOOKS
• Until Rails 4, if you return false from a before_*
hook, it would halt the whole operation (e.g. save)
• In Rails 5, this is no longer the case.
• You now have to use
• Oh my godTHANKYOU
throw(:abort)
31. CONCLUSION
• There are some new things, and not a lot of changes to existing APIs, so
upgrading shouldn’t be too hard.Also use rails rails:update.
• The belongs_to validation is one of the things you’ll have to be careful
about.
• We have better tools to create API projects, and if you’re not doing an API
project, you have some newTurbolinks features to make everything
snappier.
• Similar release to Rails 4, there are not many breaking changes, and it’s a
good thing. No need to fix something that’s not broken.