rails 101
DESCRIPTION
Rob Cameron, Senor Software Engineer at The Active Network, walks us through the fundamentals of Ruby on Rails.TRANSCRIPT
![Page 1: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/1.jpg)
Rails 101
![Page 2: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/2.jpg)
Rails is an MVC framework for Ruby focused on building
web applications
![Page 3: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/3.jpg)
David Heinemeier Hansson (DHH)
![Page 4: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/4.jpg)
First open sourced July 2004
![Page 5: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/5.jpg)
Extracted from Basecamp
![Page 6: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/6.jpg)
Version 1.0December 13, 2005
![Page 7: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/7.jpg)
![Page 8: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/8.jpg)
August 2006
Apple announces that Rails will be
installed by default in OSX
![Page 9: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/9.jpg)
Version 2.0December 7, 2007
Version 3.0August 29, 2010
![Page 10: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/10.jpg)
Current Version3.0.10
![Page 11: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/11.jpg)
Conventionover
Configuration
![Page 12: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/12.jpg)
Model
Post
![Page 13: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/13.jpg)
Model
DB Table
Post
posts
![Page 14: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/14.jpg)
Model
DB Table
Controller
Post
posts
PostsController
![Page 15: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/15.jpg)
Model
DB Table
Controller
Index
Post
posts
PostsController
/postsposts_path
![Page 16: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/16.jpg)
Model
DB Table
Controller
Index
Show
Post
posts
PostsController
/postsposts_path
/posts/1post_path(@post)
![Page 17: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/17.jpg)
Model
DB Table
Controller
Index
Show
Edit
Post
posts
PostsController
/postsposts_path
/posts/1post_path(@post)
/posts/1/editedit_posts_path(@post)
![Page 18: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/18.jpg)
Posts table
![Page 19: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/19.jpg)
Primary KeyGenerated and managed by Rails
id
Posts table
![Page 20: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/20.jpg)
Primary KeyGenerated and managed by Rails
Foreign Keybelongs_to
id
user_id
Posts table
![Page 21: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/21.jpg)
Primary KeyGenerated and managed by Rails
Foreign Keybelongs_to
Auto-populatedtimestamps
id
user_id
created_at
updated_at
Posts table
![Page 22: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/22.jpg)
The client-side is important
![Page 23: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/23.jpg)
The client-side is important
PrototypeScriptaculous
![Page 24: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/24.jpg)
The client-side is important
PrototypeScriptaculous
jQuery
![Page 25: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/25.jpg)
Generators
![Page 26: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/26.jpg)
Create a new app
![Page 27: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/27.jpg)
Structure
![Page 28: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/28.jpg)
![Page 29: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/29.jpg)
Majority of code
![Page 30: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/30.jpg)
Majority of code
App/environment config
![Page 31: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/31.jpg)
Majority of code
App/environment config
Database config (and database!)
![Page 32: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/32.jpg)
Majority of code
App/environment config
Database config (and database!)
App documentation
![Page 33: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/33.jpg)
Majority of code
App/environment config
Database config (and database!)
App documentation
Custom code
![Page 34: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/34.jpg)
Majority of code
App/environment config
Database config (and database!)
App documentation
Custom code
Images, javascript, stylesheets
![Page 35: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/35.jpg)
Majority of code
App/environment config
Database config (and database!)
App documentation
Custom code
Images, javascript, stylesheets
Rails scripts
![Page 36: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/36.jpg)
Majority of code
App/environment config
Database config (and database!)
App documentation
Custom code
Images, javascript, stylesheets
Rails scripts
Test code
![Page 37: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/37.jpg)
Majority of code
App/environment config
Database config (and database!)
App documentation
Custom code
Images, javascript, stylesheets
Rails scripts
Test code
Third party code
![Page 38: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/38.jpg)
WEBrick
![Page 39: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/39.jpg)
Scaffolding
![Page 40: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/40.jpg)
Scaffolding
Creates CRUD screens for working with a single database
table
![Page 41: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/41.jpg)
Models
![Page 42: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/42.jpg)
ActiveRecord
Object Relational Mapping
![Page 43: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/43.jpg)
Database
![Page 44: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/44.jpg)
Migrations
![Page 45: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/45.jpg)
Relationships
![Page 46: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/46.jpg)
Rails console
![Page 47: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/47.jpg)
Validations
![Page 48: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/48.jpg)
Controllers
![Page 49: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/49.jpg)
Actions
![Page 50: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/50.jpg)
Routes
![Page 51: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/51.jpg)
params
![Page 52: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/52.jpg)
session
![Page 53: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/53.jpg)
@
![Page 54: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/54.jpg)
format
![Page 55: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/55.jpg)
“The essence of XML is this: the problem it solves is not hard, and it does not solve the problem well.”
— Phil Wadler
![Page 56: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/56.jpg)
Views
![Page 57: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/57.jpg)
Layouts
![Page 58: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/58.jpg)
Partials
![Page 59: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/59.jpg)
Form helpers
![Page 60: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/60.jpg)
Helpers
![Page 61: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/61.jpg)
html_safe
![Page 62: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/62.jpg)
RESTful
![Page 63: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/63.jpg)
Free web services
![Page 64: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/64.jpg)
ws-*
![Page 65: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/65.jpg)
“Don’t blame me, I’m just a contractor.”
![Page 66: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/66.jpg)
Let HTTP do what it was meant to do
![Page 67: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/67.jpg)
GETPOSTPUT
DELETE
![Page 68: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/68.jpg)
resources
![Page 69: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/69.jpg)
GET index /posts
![Page 70: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/70.jpg)
GET
GET
index
show
/posts
/posts/1
![Page 71: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/71.jpg)
GET
GET
GET
index
show
new
/posts
/posts/1
/posts/new
![Page 72: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/72.jpg)
GET
GET
GET
POST
index
show
new
create
/posts
/posts/1
/posts/new
/posts
![Page 73: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/73.jpg)
GET
GET
GET
POST
GET
index
show
new
create
edit
/posts
/posts/1
/posts/new
/posts
/posts/1/edit
![Page 74: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/74.jpg)
GET
GET
GET
POST
GETPUT
index
show
new
create
editupdate
/posts
/posts/1
/posts/new
/posts
/posts/1/edit/posts/1
![Page 75: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/75.jpg)
GET
GET
GET
POST
GETPUTDELETE
index
show
new
create
editupdatedestroy
/posts
/posts/1
/posts/new
/posts
/posts/1/edit/posts/1/posts/1
![Page 76: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/76.jpg)
Caching
![Page 77: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/77.jpg)
Fragment caching
![Page 78: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/78.jpg)
Action caching
![Page 79: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/79.jpg)
Page caching
![Page 80: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/80.jpg)
“There are only two hard problems in Computer Science: cache invalidation and naming things.”
— Phil Karlton
![Page 81: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/81.jpg)
Testing
![Page 82: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/82.jpg)
Unit
![Page 83: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/83.jpg)
Functional
![Page 84: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/84.jpg)
Integration
![Page 85: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/85.jpg)
Configuration
![Page 86: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/86.jpg)
Environments
![Page 87: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/87.jpg)
Deployment
![Page 88: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/88.jpg)
![Page 89: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/89.jpg)
Questions?
![Page 90: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/90.jpg)
Workshop
![Page 91: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/91.jpg)
Web interface to the Active.com Search API
![Page 92: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/92.jpg)
Example
![Page 93: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/93.jpg)
What you need to know
![Page 94: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/94.jpg)
Required Gems
![Page 95: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/95.jpg)
Required Gems
# Gemfile
gem 'httparty'gem 'heroku'
![Page 96: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/96.jpg)
Required Gems
# Gemfile
gem 'httparty'gem 'heroku'
rob$ bundle install
![Page 97: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/97.jpg)
Required Gems
# Gemfile
gem 'httparty'gem 'heroku'
rob$ bundle install
rob$ gem install bundler
![Page 98: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/98.jpg)
Search API Endpoint
http://api.amp.active.com/search? v=json& k=keywords& m=meta:channel%3DRunning& api_key=wuhmn9ye94xn3xnteudxsavw
![Page 99: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/99.jpg)
HTTP call
HTTParty.get(url)
![Page 100: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/100.jpg)
Parse JSON
JSON.parse(text)
HTTP call
HTTParty.get(url)
![Page 101: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/101.jpg)
Iterate through array
my_array.each do |item| puts itemend
![Page 102: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/102.jpg)
Deploy to Heroku
git initgit add .git commit -m ‘First commit’heroku create...git push heroku master
![Page 103: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/103.jpg)
Questions?
![Page 104: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/104.jpg)
# Gemfile
gem 'httparty'gem 'heroku'
rob$ bundle install
rob$ gem install bundler
http://api.amp.active.com/search? v=json& k=keywords& m=meta:channel%3DRunning& api_key=wuhmn9ye94xn3xnteudxsavw
JSON.parse(text)
HTTParty.get(url)
my_array.each do |item| puts itemend
git initgit add .git commit -m ‘First commit’heroku create...git push heroku master
![Page 105: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/105.jpg)
“Ruby on Rails will never be used in production at Active.”
![Page 106: Rails 101](https://reader031.vdocuments.us/reader031/viewer/2022013003/555a08f0d8b42ad00a8b549e/html5/thumbnails/106.jpg)
The End