SlideShare a Scribd company logo
Rails 4.0
Nikola Šantić
• MVC Web Framework
• Verzija 1.0 - prosinac 2005.
• “Convention over configuration”, DRY
• Najbolji je
• 235.000 siteova
Ruby on Rails
• MVC Web Framework
• Verzija 1.0 - prosinac 2005.
• “Convention over configuration”, DRY
• Najbolji je
• 235.000 siteova
Ruby on Rails
• MVC Web Framework
• Verzija 1.0 - prosinac 2005.
• “Convention over configuration”, DRY
• Najbolji je
• 235.000 siteova
Ruby on Rails
• MVC Web Framework
• Verzija 1.0 - prosinac 2005.
• “Convention over configuration”, DRY
• Najbolji je
• 235.000 siteova
Ruby on Rails
• MVC Web Framework
• Verzija 1.0 - prosinac 2005.
• “Convention over configuration”, DRY
• Najbolji je
• 235.000 siteova
Ruby on Rails
Promjene
Promjene
verzije commits files changed lines changed
1.2 - 2.0 1,989 1,106
61,774 +
38,554 -
2.3 - 3.0 10,000+ 2,334
131,438 +
106,109 -
3.0 - 3.1 6,818 1,522
74,115 +
62,646 -
3.2 - 4.0? 7,304 2,005
94,231 +
92,069 -
Pretpremijera
# Gemfile
# gem 'rails', '3.2.8'
gem 'rails', github: 'rails/rails'
$ bundle update
NOVE
STVARI
Strong Parameters
# app/models/user.rb
class User < ActiveRecord::Base
end
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def update
# params = {user: {name: 'Nikola', age: 25}}
@user = User.find(params[:id])
@user = @user.update_attributes(params[:user])
redirect_to @user
end
end
Mass assignment
# app/models/user.rb
class User < ActiveRecord::Base
end
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def update
# params = {user: {name: 'Nikola', admin: true}}
@user = User.find(params[:id])
@user = @user.update_attributes(params[:user])
redirect_to @user
end
end
Mass assignment
# app/models/user.rb
class User < ActiveRecord::Base
end
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def update
# params = {user: {name: 'Nikola', admin: true}}
@user = User.find(params[:id])
@user = @user.update_attributes(params[:user])
redirect_to @user
end
end
# @user.admin?
# => true
Mass assignment
# app/models/user.rb
class User < ActiveRecord::Base
attr_accessible :name
end
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def update
# params = {user: {name: 'Nikola', admin: true}}
@user = User.find(params[:id])
@user = @user.update_attributes(params[:user])
redirect_to @user
end
end
# @user.admin?
# => false
Mass assignment
config.active_record.whitelist_attributes = false
# app/models/user.rb
class User < ActiveRecord::Base
end
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def update
# params = {user: {name: 'Nikola', admin: true}}
@user = User.find(params[:id])
@user = @user.update_attributes(user_params)
redirect_to @user
end
private
def user_params
params.require(:user).permit(:name)
end
end
Strong parameters
params.require(:user).permit(:name, :email, :password)
Strong parameters
params.require(:user).permit(:name, :email, :password)
Strong parameters
POST /users
params = {username: ‘Budala’}
params.require(:user).permit(:name, :email, :password)
Strong parameters
POST /users
params = {username: ‘Budala’}
<= 400 Bad Request
params.require(:user).permit(:name, :email, :password)
Strong parameters
POST /users
params = {user: {name: ‘Nikola’, admin: true}}
params.require(:user).permit(:name, :email, :password)
Strong parameters
POST /users
params = {user: {name: ‘Nikola’, admin: true}}
<= 201 CREATED
User.find_by_name(‘Nikola’).admin?
=> false
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def user_params
params.require(:user).permit(:name)
end
end
# app/controllers/admin/users_controller.rb
class Admin::UsersController < ApplicationController
def user_params
params.require(:user).permit(User.attribute_names)
end
end
Višestruke uloge
https://github.com/rails/strong_parameters
Dostupan već danas!
ActiveSupport::Queue
• delayed_job
• Resque
• Sidekiq
• ...
Background job - Prije
class ExpensiveOperation
def run
# ...
end
end
Rails.queue.push(ExpensiveOperation.new)
Background job - Sada
config.queue = :asynchronous
config.queue = :synchronous
config.queue = :resque
Podešavanje
config.action_mailer.async = true
Asinkroni ActionMailer
ActionController::Live
class MyController < ActionController::Base
def index
100.times {
response.stream.write "hello worldn"
}
response.stream.close
end
end
Streaming
class MyController < ActionController::Base
include ActionController::Live
def index
100.times {
response.stream.write "hello worldn"
}
response.stream.close
end
end
Streaming
class MyController < ActionController::Base
include ActionController::Live
def index
100.times {
response.stream.write "hello worldn"
}
response.stream.close
end
end
Streaming
WEBrick
class MyController < ActionController::Base
include ActionController::Live
def index
100.times {
response.stream.write "hello worldn"
}
response.stream.close
end
end
Streaming
WEBrick
class MyController < ActionController::Base
include ActionController::Live
def index
100.times {
response.stream.write "hello worldn"
}
response.stream.close
end
end
Streaming
WEBrick Unicorn
class MyController < ActionController::Base
include ActionController::Live
def index
100.times {
response.stream.write "hello worldn"
}
response.stream.close
end
end
Streaming
WEBrick Unicorn
class MyController < ActionController::Base
include ActionController::Live
def index
100.times {
response.stream.write "hello worldn"
}
response.stream.close
end
end
Streaming
WEBrick Unicorn
Rainbows
Puma
Thin
Rails 4.0 > Node.js ?
STARE
STVARI
Cache Digest
@user
Babuška caching
@project
@project
@task
@task
@task
<%# app/views/users/show.html.erb %>
<% cache [ 'v1', @user ] do %>
<h1> <%= @user.name %> </h1>
<%= render @user.projects %>
<% end %>
<%# app/views/projects/_project.html.erb %>
<% cache [ 'v1', project ] do %>
<%= project.description %>
<%= render project.tasks %>
<% end %>
<%# app/views/tasks/_task.html.erb %>
<% cache [ 'v1', task ] do %>
Todo: <%= task.content %>
<% end %>
Babuška caching
<%# app/views/users/show.html.erb %>
<% cache [ 'v1', @user ] do %>
<h1> <%= @user.name %> </h1>
<p> Vaši projekti: </p>
<%= render @user.projects %>
<% end %>
<%# app/views/projects/_project.html.erb %>
<% cache [ 'v1', project ] do %>
<%= project.description %>
<%= render project.tasks %>
<% end %>
<%# app/views/tasks/_task.html.erb %>
<% cache [ 'v1', task ] do %>
Todo: <%= task.content %>
<% end %>
Babuška caching
<%# app/views/users/show.html.erb %>
<% cache [ 'v2', @user ] do %>
<h1> <%= @user.name %> </h1>
<p> Vaši projekti: </p>
<%= render @user.projects %>
<% end %>
<%# app/views/projects/_project.html.erb %>
<% cache [ 'v1', project ] do %>
<%= project.description %>
<%= render project.tasks %>
<% end %>
<%# app/views/tasks/_task.html.erb %>
<% cache [ 'v1', task ] do %>
Todo: <%= task.content %>
<% end %>
Babuška caching
<%# app/views/users/show.html.erb %>
<% cache [ 'v2', @user ] do %>
<h1> <%= @user.name %> </h1>
<p> Vaši projekti: </p>
<%= render @user.projects %>
<% end %>
<%# app/views/projects/_project.html.erb %>
<% cache [ 'v1', project ] do %>
<%= project.description %>
<%= render project.tasks %>
<% end %>
<%# app/views/tasks/_task.html.erb %>
<% cache [ 'v1', task ] do %>
Todo: <%= task.content %>
Date: <%= task.date %>
<% end %>
Babuška caching
<%# app/views/users/show.html.erb %>
<% cache [ 'v3', @user ] do %>
<h1> <%= @user.name %> </h1>
<p> Vaši projekti: </p>
<%= render @user.projects %>
<% end %>
<%# app/views/projects/_project.html.erb %>
<% cache [ 'v2', project ] do %>
<%= project.description %>
<%= render project.tasks %>
<% end %>
<%# app/views/tasks/_task.html.erb %>
<% cache [ 'v2', task ] do %>
Todo: <%= task.content %>
Date: <%= task.date %>
<% end %>
Babuška caching
<%# app/views/users/show.html.erb %>
<% cache @user do %>
<h1> <%= @user.name %> </h1>
<%= render @user.projects %>
<% end %>
<%# app/views/projects/_project.html.erb %>
<% cache project do %>
<%= project.description %>
<%= render project.tasks %>
<% end %>
<%# app/views/tasks/_task.html.erb %>
<% cache task do %>
Todo: <%= task.content %>
<% end %>
Sada
Čarolijom!
(+ koristi MD5 templatea i partiala
kao cache key)
Kako???
https://github.com/rails/cache_digests
Dostupan već danas!
Routing concerns
BCX::Application.routes.draw do
resources :messages { resources :comments }
resources :forwards { resources :comments }
resources :uploads { resources :comments }
end
Prije
BCX::Application.routes.draw do
concern :commentable do
resources :comments
end
resources :messages, :forwards, :uploads, concerns: :commentable
end
Sada
https://github.com/rails/routing_concerns
Dostupan već danas!
ActiveRecord::Relation
User.first
User.last
Prvi koji?
User.first
User.last
Prvi koji?
Sortirani po id-u
SELECT "users".* FROM "users" ORDER BY id LIMIT 1
Koji svi?
User.all
Vraća ActiveRecord::Relation objekt
Koji svi?
User.all
Vraća ActiveRecord::Relation objekt
@users = User.all
@users = @users.where(name: params[:name]) if params[:name]
@users = @users.order(params[:sort_by]) if params[:sort_by]
Nikoji, eto koji
User.none
Null objekt koji se dalje može ulančavati
I još
User.(metoda)!
I još
User.(metoda)!
@users = User.all
@users = @users.where(name: params[:name]) if params[:name]
@users = @users.order(params[:sort_by]) if params[:sort_by]
Prije:
I još
User.(metoda)!
@users = User.all
@users = @users.where(name: params[:name]) if params[:name]
@users = @users.order(params[:sort_by]) if params[:sort_by]
Prije:
@users = User.all
@users.where!(name: params[:name]) if params[:name]
@users.order!(params[:sort_by]) if params[:sort_by]
Sada:
ZBOGOM
STVARI
Zbogom Ruby 1.8
Zbogom
find(:all, :conditions => ...)
Zbogom
ActiveRecord:SessionStore
Zbogom
ActiveResource
Zbogom
Rails::Plugin
Zbogom
Rails::Plugin
• u /lib folder
• pretvori u gem
• Turbolinks
• Cached schema dump
• HTTP PATCH
• HTML5 helperi
• config.threadsafe!
Još STO stvari
• Rails 3.1 - gotov
• Rails 3.2 - neka deprecation upozorenja, podrška do 4.1
• Rails 4.0 - deprecation upozorenja
• Rails 4.1 - uklanjanje deprecated dijelova
Verzioniranje
Kad izlazi?
http://edgeguides.rubyonrails.org/4_0_release_notes.html
Dodatna literatura
Rails 4.0 Mind map
Boston.rb - What to expect in Rails 4.0
EdgeRails.info Blog
https://github.com/rails/rails
Dodatna dodatna literatura
Pitanja?
Hvala na pažnji!

More Related Content

What's hot

Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju
Skills Matter
 
实战Ecos
实战Ecos实战Ecos
实战Ecos
wanglei999
 
AtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using nowAtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using now
Atlassian
 
Ruby on Rails + AngularJS + Twitter Bootstrap
Ruby on Rails + AngularJS + Twitter BootstrapRuby on Rails + AngularJS + Twitter Bootstrap
Ruby on Rails + AngularJS + Twitter Bootstrap
Marcio Marinho
 
devise tutorial - 2011 rubyconf taiwan
devise tutorial - 2011 rubyconf taiwandevise tutorial - 2011 rubyconf taiwan
devise tutorial - 2011 rubyconf taiwan
Tse-Ching Ho
 
jQuery and Rails: Best Friends Forever
jQuery and Rails: Best Friends ForeverjQuery and Rails: Best Friends Forever
jQuery and Rails: Best Friends Forever
stephskardal
 
jQuery and AJAX with Rails
jQuery and AJAX with RailsjQuery and AJAX with Rails
jQuery and AJAX with Rails
Alan Hecht
 
Devise and Rails
Devise and RailsDevise and Rails
Devise and Rails
William Leeper
 
Zazzy WordPress Navigation WordCamp Milwaukee
Zazzy WordPress Navigation WordCamp MilwaukeeZazzy WordPress Navigation WordCamp Milwaukee
Zazzy WordPress Navigation WordCamp Milwaukee
Rachel Baker
 
Keeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and WebpackKeeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and Webpack
Ignacio Martín
 
Fisl 11 - Dicas de Desenvolvimento Web com Ruby
Fisl 11 - Dicas de Desenvolvimento Web com RubyFisl 11 - Dicas de Desenvolvimento Web com Ruby
Fisl 11 - Dicas de Desenvolvimento Web com Ruby
Fabio Akita
 
Primefaces Confess 2012
Primefaces Confess 2012Primefaces Confess 2012
Primefaces Confess 2012
cagataycivici
 
SPA using Rails & Backbone
SPA using Rails & BackboneSPA using Rails & Backbone
SPA using Rails & Backbone
Ashan Fernando
 
Introduction to AngularJS For WordPress Developers
Introduction to AngularJS For WordPress DevelopersIntroduction to AngularJS For WordPress Developers
Introduction to AngularJS For WordPress Developers
Caldera Labs
 
How to migrate Cakephp 1.x to 2.x
How to migrate Cakephp 1.x to 2.xHow to migrate Cakephp 1.x to 2.x
How to migrate Cakephp 1.x to 2.x
Andolasoft Inc
 
Using Angular with Rails
Using Angular with RailsUsing Angular with Rails
Using Angular with Rails
Jamie Davidson
 
PrimeTime JSF with PrimeFaces - Dec 2014
PrimeTime JSF with PrimeFaces - Dec 2014PrimeTime JSF with PrimeFaces - Dec 2014
PrimeTime JSF with PrimeFaces - Dec 2014
cagataycivici
 
Gae Meets Django
Gae Meets DjangoGae Meets Django
Gae Meets Django
fool2nd
 
multiple views and routing
multiple views and routingmultiple views and routing
multiple views and routing
Brajesh Yadav
 
How routing works in angular js
How routing works in angular jsHow routing works in angular js
How routing works in angular js
codeandyou forums
 

What's hot (20)

Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju
 
实战Ecos
实战Ecos实战Ecos
实战Ecos
 
AtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using nowAtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using now
 
Ruby on Rails + AngularJS + Twitter Bootstrap
Ruby on Rails + AngularJS + Twitter BootstrapRuby on Rails + AngularJS + Twitter Bootstrap
Ruby on Rails + AngularJS + Twitter Bootstrap
 
devise tutorial - 2011 rubyconf taiwan
devise tutorial - 2011 rubyconf taiwandevise tutorial - 2011 rubyconf taiwan
devise tutorial - 2011 rubyconf taiwan
 
jQuery and Rails: Best Friends Forever
jQuery and Rails: Best Friends ForeverjQuery and Rails: Best Friends Forever
jQuery and Rails: Best Friends Forever
 
jQuery and AJAX with Rails
jQuery and AJAX with RailsjQuery and AJAX with Rails
jQuery and AJAX with Rails
 
Devise and Rails
Devise and RailsDevise and Rails
Devise and Rails
 
Zazzy WordPress Navigation WordCamp Milwaukee
Zazzy WordPress Navigation WordCamp MilwaukeeZazzy WordPress Navigation WordCamp Milwaukee
Zazzy WordPress Navigation WordCamp Milwaukee
 
Keeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and WebpackKeeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and Webpack
 
Fisl 11 - Dicas de Desenvolvimento Web com Ruby
Fisl 11 - Dicas de Desenvolvimento Web com RubyFisl 11 - Dicas de Desenvolvimento Web com Ruby
Fisl 11 - Dicas de Desenvolvimento Web com Ruby
 
Primefaces Confess 2012
Primefaces Confess 2012Primefaces Confess 2012
Primefaces Confess 2012
 
SPA using Rails & Backbone
SPA using Rails & BackboneSPA using Rails & Backbone
SPA using Rails & Backbone
 
Introduction to AngularJS For WordPress Developers
Introduction to AngularJS For WordPress DevelopersIntroduction to AngularJS For WordPress Developers
Introduction to AngularJS For WordPress Developers
 
How to migrate Cakephp 1.x to 2.x
How to migrate Cakephp 1.x to 2.xHow to migrate Cakephp 1.x to 2.x
How to migrate Cakephp 1.x to 2.x
 
Using Angular with Rails
Using Angular with RailsUsing Angular with Rails
Using Angular with Rails
 
PrimeTime JSF with PrimeFaces - Dec 2014
PrimeTime JSF with PrimeFaces - Dec 2014PrimeTime JSF with PrimeFaces - Dec 2014
PrimeTime JSF with PrimeFaces - Dec 2014
 
Gae Meets Django
Gae Meets DjangoGae Meets Django
Gae Meets Django
 
multiple views and routing
multiple views and routingmultiple views and routing
multiple views and routing
 
How routing works in angular js
How routing works in angular jsHow routing works in angular js
How routing works in angular js
 

Similar to WebcampZG - Rails 4

The Rails Way
The Rails WayThe Rails Way
The Rails Way
Michał Orman
 
Ruby on Rails : RESTful 和 Ajax
Ruby on Rails : RESTful 和 AjaxRuby on Rails : RESTful 和 Ajax
Ruby on Rails : RESTful 和 Ajax
Wen-Tien Chang
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
Yehuda Katz
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the Finish
Yehuda Katz
 
What's new in Rails 4
What's new in Rails 4What's new in Rails 4
What's new in Rails 4
Fabio Akita
 
Advanced RESTful Rails
Advanced RESTful RailsAdvanced RESTful Rails
Advanced RESTful Rails
Ben Scofield
 
Advanced RESTful Rails
Advanced RESTful RailsAdvanced RESTful Rails
Advanced RESTful Rails
Viget Labs
 
More to RoC weibo
More to RoC weiboMore to RoC weibo
More to RoC weibo
shaokun
 
Google app engine by example
Google app engine by exampleGoogle app engine by example
Google app engine by example
Alexander Zamkovyi
 
QConSP 2015 - Dicas de Performance para Aplicações Web
QConSP 2015 - Dicas de Performance para Aplicações WebQConSP 2015 - Dicas de Performance para Aplicações Web
QConSP 2015 - Dicas de Performance para Aplicações Web
Fabio Akita
 
Rails 2.3 and Rack - NHRuby Feb 2009
Rails 2.3 and Rack - NHRuby Feb 2009Rails 2.3 and Rack - NHRuby Feb 2009
Rails 2.3 and Rack - NHRuby Feb 2009
bturnbull
 
Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)
Joao Lucas Santana
 
How to disassemble one monster app into an ecosystem of 30
How to disassemble one monster app into an ecosystem of 30How to disassemble one monster app into an ecosystem of 30
How to disassemble one monster app into an ecosystem of 30
fiyuer
 
Angular.js Fundamentals
Angular.js FundamentalsAngular.js Fundamentals
Angular.js Fundamentals
Mark
 
Ruby on Rails - Introduction
Ruby on Rails - IntroductionRuby on Rails - Introduction
Ruby on Rails - Introduction
Vagmi Mudumbai
 
Working with Javascript in Rails
Working with Javascript in RailsWorking with Javascript in Rails
Working with Javascript in Rails
Seungkyun Nam
 
Resource and view
Resource and viewResource and view
Resource and view
Papp Laszlo
 
Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2
A.K.M. Ahsrafuzzaman
 
Intro to-rails-webperf
Intro to-rails-webperfIntro to-rails-webperf
Intro to-rails-webperf
New Relic
 
20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev
Frank Rousseau
 

Similar to WebcampZG - Rails 4 (20)

The Rails Way
The Rails WayThe Rails Way
The Rails Way
 
Ruby on Rails : RESTful 和 Ajax
Ruby on Rails : RESTful 和 AjaxRuby on Rails : RESTful 和 Ajax
Ruby on Rails : RESTful 和 Ajax
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the Finish
 
What's new in Rails 4
What's new in Rails 4What's new in Rails 4
What's new in Rails 4
 
Advanced RESTful Rails
Advanced RESTful RailsAdvanced RESTful Rails
Advanced RESTful Rails
 
Advanced RESTful Rails
Advanced RESTful RailsAdvanced RESTful Rails
Advanced RESTful Rails
 
More to RoC weibo
More to RoC weiboMore to RoC weibo
More to RoC weibo
 
Google app engine by example
Google app engine by exampleGoogle app engine by example
Google app engine by example
 
QConSP 2015 - Dicas de Performance para Aplicações Web
QConSP 2015 - Dicas de Performance para Aplicações WebQConSP 2015 - Dicas de Performance para Aplicações Web
QConSP 2015 - Dicas de Performance para Aplicações Web
 
Rails 2.3 and Rack - NHRuby Feb 2009
Rails 2.3 and Rack - NHRuby Feb 2009Rails 2.3 and Rack - NHRuby Feb 2009
Rails 2.3 and Rack - NHRuby Feb 2009
 
Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)
 
How to disassemble one monster app into an ecosystem of 30
How to disassemble one monster app into an ecosystem of 30How to disassemble one monster app into an ecosystem of 30
How to disassemble one monster app into an ecosystem of 30
 
Angular.js Fundamentals
Angular.js FundamentalsAngular.js Fundamentals
Angular.js Fundamentals
 
Ruby on Rails - Introduction
Ruby on Rails - IntroductionRuby on Rails - Introduction
Ruby on Rails - Introduction
 
Working with Javascript in Rails
Working with Javascript in RailsWorking with Javascript in Rails
Working with Javascript in Rails
 
Resource and view
Resource and viewResource and view
Resource and view
 
Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2
 
Intro to-rails-webperf
Intro to-rails-webperfIntro to-rails-webperf
Intro to-rails-webperf
 
20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev
 

WebcampZG - Rails 4