Download - Rails 5 – Amsterdam.rb – Uberous
![Page 1: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/1.jpg)
amsterdam.rb
Rails 5What's new?
Rails 5 by Jeroen Visser 1
![Page 2: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/2.jpg)
amsterdam.rb
I'm Jeroen Visser
• CTO @ Uberous
• github.com/jeroenvisser101
• twiFer.com/jeroenvisser101
• I blog at jrnv.nl
2
That's me
Photo by Tim Gouw
![Page 3: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/3.jpg)
amsterdam.rb
I like beta soHware
3
![Page 4: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/4.jpg)
amsterdam.rb
Rails 5
4
![Page 5: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/5.jpg)
amsterdam.rb
Current state
5
Race condiJon →
![Page 6: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/6.jpg)
amsterdam.rb
Current state
6
![Page 7: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/7.jpg)
amsterdam.rb
New in Rails 5
7
![Page 8: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/8.jpg)
amsterdam.rb
Visual idenJty
8
![Page 9: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/9.jpg)
amsterdam.rb
New home pagehFps://github.com/rails/rails/pull/23237
by @gsamokovarov
9
![Page 10: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/10.jpg)
amsterdam.rb 10
![Page 11: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/11.jpg)
amsterdam.rb 11
![Page 12: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/12.jpg)
amsterdam.rb
AcJon Cable
12
![Page 13: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/13.jpg)
amsterdam.rb
What is AcJon Cable?
13
![Page 14: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/14.jpg)
amsterdam.rb
Live
14
![Page 15: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/15.jpg)
amsterdam.rb
How does it work?
15
![Page 16: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/16.jpg)
amsterdam.rb
How does it work?
Channel Imagine this as an IRC channel
Users can subscribe to it
16
Broadcast Imagine this as a message sent
on a channel
![Page 17: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/17.jpg)
amsterdam.rb 17
class NotificationChannel < ApplicationCable::Channel
end
def subscribed stream_from "some_channel" end
def unsubscribed # Any cleanup needed when channel is unsubscribed end
![Page 18: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/18.jpg)
amsterdam.rb 18
ActionCable.server.broadcast( "some_channel", some_data: "some string")
![Page 19: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/19.jpg)
amsterdam.rb 19
def subscribed stream_for current_user end
![Page 20: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/20.jpg)
amsterdam.rb
NotificationChannel.broadcast_to( @user, @notification )
![Page 21: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/21.jpg)
amsterdam.rb
MulJplexing
21
image from wikimedia
![Page 22: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/22.jpg)
amsterdam.rb
Front-end setup
22
![Page 23: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/23.jpg)
amsterdam.rb 23
# app/assets/javascripts/cable.coffee #= require_self@App ||= {}App.cable = ActionCable.createConsumer()
#= require action_cable
#= require_tree ./channels
![Page 24: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/24.jpg)
amsterdam.rb 24
# .../javascripts/channels/notification_channel.coffee App.cable.subscriptions.create { channel: 'some_channel' any_other_parameters: 'some value' }, received: (data) -> console.log data
![Page 25: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/25.jpg)
amsterdam.rb
ActionController::Renderer
25
![Page 26: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/26.jpg)
amsterdam.rb 26
MessagesController.render( partial: 'messages/message', locals: { message: params[:message][:body] } )
![Page 27: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/27.jpg)
amsterdam.rb
Rails API
27
![Page 28: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/28.jpg)
amsterdam.rb 28
rails new my-api-project --api
![Page 29: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/29.jpg)
amsterdam.rb
AFributes API
29
![Page 30: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/30.jpg)
amsterdam.rb 30
# app/models/product.rbclass Product < ApplicationRecord attribute :price_in_cents, MoneyType.new end
![Page 31: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/31.jpg)
amsterdam.rb 31
class MoneyType < ActiveRecord::Type::Integer def type_cast(value) # convert values like '$10.00' to 1000 endend
![Page 32: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/32.jpg)
amsterdam.rb 32
product = Product.new(price_in_cents: '$10.00') product.price_in_cents #=> 1000
![Page 33: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/33.jpg)
amsterdam.rb
ApplicaJonRecord
33
![Page 34: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/34.jpg)
amsterdam.rb 34
class ApplicationRecord < ActiveRecord::Baseend self.abstract_class = true
![Page 35: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/35.jpg)
amsterdam.rb
ActiveRecord::Relation#or
35
![Page 36: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/36.jpg)
amsterdam.rb 36
Project.flagged.or(Project.open) # orProject.where(name: "My Project"). or(Project.where(name: "Other Project"))
![Page 37: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/37.jpg)
amsterdam.rb
ActiveRecord::Relation#in_batches
37
![Page 38: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/38.jpg)
amsterdam.rb 38
Person.where("age >= 18").in_batches(of: 10) do |people| people.update_all(can_drink: true)end
![Page 39: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/39.jpg)
amsterdam.rb
ActiveRecord::Base#has_secure_token
39
![Page 40: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/40.jpg)
amsterdam.rb 40
class User < ApplicationRecord has_secure_token :email_verification_token end
![Page 41: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/41.jpg)
amsterdam.rb 41
user = User.createuser.email_verification_token #=> 'e2426a93718d1817a43abbaa'
![Page 42: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/42.jpg)
amsterdam.rb 42
user.regenerate_email_verification_token
![Page 43: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/43.jpg)
amsterdam.rb
rake db:migrate
43
![Page 44: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/44.jpg)
amsterdam.rb
rails db:migrate
44
rake db:migrate
![Page 45: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/45.jpg)
amsterdam.rb
Turbolinks 3
45
![Page 46: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/46.jpg)
amsterdam.rb
Turbolinks 5
46
Turbolinks 3
![Page 47: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/47.jpg)
amsterdam.rb
Upgrading to Rails 5
47
![Page 48: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/48.jpg)
amsterdam.rb
> Ruby 2.2.2
48
![Page 49: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/49.jpg)
amsterdam.rb
Write tests
49
![Page 50: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/50.jpg)
amsterdam.rb
Write good tests
50
Write tests
![Page 51: Rails 5 – Amsterdam.rb – Uberous](https://reader033.vdocuments.mx/reader033/viewer/2022042906/58a0ba6c1a28ab75368b70ab/html5/thumbnails/51.jpg)
amsterdam.rb
rails app:update
51