12. users
id username email
1 olivier olivier@kudoz.com
2 edward ed@lovelyhood.com
3 vincent vincent@uslide.io
13. users products
id username email
1 olivier olivier@kudoz.com
2 edward ed@lovelyhood.com
3 vincent vincent@uslide.io
id name url user_id
1 LovelyHood lovely-hood.com
14. users products
id username email
1 olivier olivier@kudoz.com
2 edward ed@lovelyhood.com
3 vincent vincent@uslide.io
id name url user_id
1 LovelyHood lovely-hood.com 2
15. users products
id username email
1 olivier olivier@kudoz.com
2 edward ed@lovelyhood.com
3 vincent vincent@uslide.io
id name url user_id
1 LovelyHood lovely-hood.com 2
2 Kudoz getkudoz.com 1
3 uSlide uslide.io 3
4 Freshest frshst.com 2
16. users products
id username email
1 olivier olivier@kudoz.com
2 edward ed@lovelyhood.com
3 vincent vincent@uslide.io
id name url user_id
1 LovelyHood lovely-hood.com 2
2 Kudoz getkudoz.com 1
3 uSlide uslide.io 3
4 Freshest frshst.com 2
a user has many products
a product belongs to one user
1..N relationship
17. users products
id username email
1 olivier olivier@kudoz.com
2 edward ed@lovelyhood.com
3 vincent vincent@uslide.io
id name url user_id
1 LovelyHood lovely-hood.com 2
2 Kudoz getkudoz.com 1
3 uSlide uslide.io 3
4 Freshest frshst.com 2
primary key primary key foreign key
20. History
Created in 2003 by David Heinemeier Hansson (DHH), while working on Basecamp.
Extracted and released it as open source code in July of 2004
38. HTTP request is 4 things
1 - HTTP verb (GET / POST / PATCH / DELETE)
2 - URL
3 - headers
4 - body (not always)
39. Rails routing
GET /products
get “home” => “pages#home”
get “about” => “pages#about”
get “products” => “products#index”
post “products” => “products#create”
PagesController
ProductsController
def index
…
end
def create
…
end
49. class CreateProducts < ActiveRecord::Migration
def change
create_table :products do |t|
t.string :name
t.timestamps null: false
end
end
end
ActiveRecord Migration
67. We always need same actions
As a user, I can CRUD a flat
As a user, I can CRUD a tweet
As a user, I can CRUD a post
As a user, I can CRUD a product
68. get “products” “products#index”=>
get “products/:id” “products#show”=>
get “products/new” “products#new”=>
post “products” “products#create”=>
get “products/:id/edit” “products#edit”=>
patch “products/:id” “products#update”=>
delete “products/:id” “products#destroy”=>
79. class ProductsController
def new
@product = Product.new
end
def create
safe_params = params.require(:product).permit(:name, :tagline)
product = Product.new(safe_params)
product.save
redirect_to products_path
end
end