Download - Riding Rails 4
![Page 1: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/1.jpg)
RIDING RAILS 4
![Page 2: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/2.jpg)
#BCNONRAILS4
![Page 3: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/3.jpg)
PHILIP DE SMEDT
@PHILIPDESMEDT
PHILIPDESMEDT.COM
![Page 4: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/4.jpg)
FULL-STACK DEVELOPER
FREELANCE
(HIRE ME)
![Page 5: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/5.jpg)
I WROTE A BOOKUPGRADE TO RAILS 4
![Page 6: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/6.jpg)
WHO HAS TRIED RAILS
4?gem install rails --version 4.0.0.beta1 --no-ri --no-rdoc
![Page 7: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/7.jpg)
TURBOLINKS
![Page 8: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/8.jpg)
LISTENS TO CLICK EVENTS
![Page 9: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/9.jpg)
LISTENS TO CLICK EVENTS
LOADS CONTENT
WITHOUT RELOADING THE PAGE
![Page 10: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/10.jpg)
LISTENS TO CLICK EVENTSLOADS CONTENT WITHOUT RELOADING THE PAGE
REPLACES BODY+TITLE
USING HTML5 pushState
![Page 11: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/11.jpg)
DEMO
![Page 12: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/12.jpg)
RUSSIAN DOLL CACHING
![Page 13: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/13.jpg)
class Post < ActiveRecord::Base has_many :categoriesend
class Category < ActiveRecord::Base belongs_to :post, touch: trueend
LET’S CACHE
![Page 14: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/14.jpg)
<!-- app/views/posts/show.html.erb --><% cache [‘v1’, @post] do %> <h1><%= @post.title %> categories:</h1> <ul><%= render @post.categories %></ul><% end %>
RAILS 3
![Page 15: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/15.jpg)
RAILS 3
<!-- app/views/categories/_category.html.erb --><% cache [‘v1’, category] do %> <li> <%= category.title %> <%= link_to “edit”, category %> </li><% end %>
![Page 16: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/16.jpg)
views/v1/posts/1-20130228151844
RAILS 3 CACHE KEYS
![Page 17: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/17.jpg)
RAILS 3
<!-- app/views/categories/_category.html.erb -->
<% cache [‘v2’, category] do %> <li> <%= category.title %>
<%= link_to “RENAME”, category %> </li><% end %>
![Page 18: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/18.jpg)
<!-- app/views/posts/show.html.erb -->
<% cache [‘v2’, @post] do %> <h1><%= @post.title %> categories:</h1> <ul><%= render @post.categories %></ul><% end %>
RAILS 3
![Page 19: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/19.jpg)
![Page 20: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/20.jpg)
<!-- app/views/categories/_category.html.erb --><% cache category do %> <li> <%= category.title %> <%= link_to “edit”, category %> </li><% end %>
<!-- app/views/posts/show.html.erb --><% cache @post do %> <h1><%= @post.title %> categories:</h1> <ul><%= render @post.categories %></ul><% end %>
![Page 21: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/21.jpg)
views/posts/1-20130228151844/fbda9857614e68ed1df453559a761d47
RAILS 4 CACHE DIGEST
![Page 22: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/22.jpg)
STRONG PARAMETERS
![Page 23: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/23.jpg)
class User < ActiveRecord::Base attr_accessible :name, :emailend def create
@user = User.new(params[:user])@user.save
end
RAILS 3
![Page 24: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/24.jpg)
EXAMPLE
![Page 25: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/25.jpg)
class CarsController < ApplicationControllerdef create
@car = Car.new(car_params) if @car.save
redirect_to @car else render ‘new’
end endend
RAILS 4
![Page 26: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/26.jpg)
private def car_params params.require(:car).permit(:name, :year, :brand) end
require(key) - Ensures that a parameter is present. If it’s present,
returns the parameter at the given key, otherwise raises an
ActionController:: ParameterMissing error.
permit(filters) - Returns a new ActionController::Parameters
instance that includes only the given filters
and sets the permitted attribute for the object to true. This is useful
for limiting which attributes should be allowed for mass updating.
![Page 27: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/27.jpg)
LIVE STREAMING
![Page 28: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/28.jpg)
ACTIONCONTROLLER::LIVE
MIXIN I/O OBJECTSTREAM DATA TO CLIENT
![Page 29: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/29.jpg)
DON’T USE WEBrick
USE PUMA OR RAINBOWS!
![Page 30: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/30.jpg)
RUNS IN SEPARATE THREAD
![Page 31: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/31.jpg)
CLOSE YOUR STREAM
WHEN DONE
![Page 32: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/32.jpg)
PUMA vs. RAINBOWS! vs. NODE.JS
RUBYSNIPPETS.COM
![Page 33: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/33.jpg)
![Page 34: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/34.jpg)
DEMO
![Page 35: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/35.jpg)
ACTIVEMODEL::MODEL
![Page 36: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/36.jpg)
FORM WITHOUT ACTIVE
RECORD. WTF?
![Page 37: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/37.jpg)
FORM_TAG HELPER
CREATE MODEL
![Page 38: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/38.jpg)
EXAMPLE
![Page 39: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/39.jpg)
class Contactinclude ActiveModel::Model
attr_accessor :name, :email, :messagevalidates :name, presence: truevalidates :email, presence: truevalidates :message, presence: true,
length: { maximum: 300 }end
contact = Contact.new(name: 'John Doe', email: '[email protected]', message: 'a test')
![Page 40: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/40.jpg)
<h1>Contact Us</h1>
<%= form_for @contact do |f| %><%= f.label :name %><%= f.text_field :name %><%= f.label :email %><%= f.email_field :email %><%= f.label :message %><%= f.text_area :message %><%= f.submit 'Submit' %>
<% end %>
![Page 41: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/41.jpg)
class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(params[:contact])
if @contact.valid?
UserMailer.new_contact(@contact).deliver
redirect_to root_path, notice: "Message sent! Thanks.”
else
render :new
end
end
end
![Page 42: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/42.jpg)
LOTS OF OTHER STUFF
CONTROLLER-WIDE E-TAGS
THREAD SAFETY
ENCRYPTED COOKIES
ROUTING CONCERNS
HTTP PATCH VERB
CUSTOM FLASH TYPESHTML5 FORM HELPERS
SCHEMA CACHE DUMP
NO MORE OBSERVERS/SWEEPERS
INDEX PAGE CONTROLLERACTIVE RESOURCE
PAGE/ACTION CACHING
![Page 43: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/43.jpg)
EDUCATION IS BROKEN.I’LL BE TEACHING RAILS…
I <3 DEVBOOTCAMP/STARTER LEAGUE/…
IN BARCELONA.
![Page 44: Riding Rails 4](https://reader033.vdocuments.mx/reader033/viewer/2022061106/5412bf1d8d7f720f4e8b46d3/html5/thumbnails/44.jpg)
PHILIP DE SMEDT
@PHILIPDESMEDT
PHILIPDESMEDT.COM
COME SAY HI
LEANPUB.COM/UPGRADETORAILS4