Richard Piacentini
Tunisia on Rails -15 Mai 2010
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Langage de Programmation
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Langage de Programmation
Framework Web
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Framework Web
Langage de Programmation
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Framework Web ?
Thursday, May 20, 2010
Ensemble de composants
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Socle commun
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Structure identique
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Pourquoi utiliser un framework ?
Thursday, May 20, 2010
Pour ne pas rinventer la roue
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Pour imposer des normes...
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
... Et des bonnes pratiques !
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Quels sont les gains ?
Thursday, May 20, 2010
Productivit
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Rutilisation
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
conomies dchelle
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Focalisation sur la valeur ajoute
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Thursday, May 20, 2010
Les principes
Thursday, May 20, 2010
DRY
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
DRY
Dont repeat yourself ! Dont repeat yourself !
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
DRY
Dont repeat yourself !
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Convention over configuration
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Opinionated framework
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Les avantages
Thursday, May 20, 2010
Ruby full-stack
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
MVC
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
MVC
Model / View / Controller
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Tests intgrs !
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
crivez des tests !
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
crivez des tests !
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests !
crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests !
crivez des tests ! crivez des tests ! ! crivez des tests ! crivez des tests crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests !
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests !
crivez des tests ! crivez des tests ! crivez des tests !
crivez des tests !
crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests !
crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests ! crivez des tests !
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
crivez des tests !
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Les composants
Thursday, May 20, 2010
ActiveRecord ActionView ActionController
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord ActionView ActionController
Model
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord ActionView ActionController
Model View
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord ActionView ActionController
Model View Controller
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord ActionView ActionController
Model
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord ActionView ActionController
Model
ActionPack
View Controller
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Exemple
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Exemple
[Link]
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Exemple
Rails
Routage
[Link]
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Exemple
Rails
Routage
[Link] Le systme de routage trouve le contrleur confrenciers
Contrleur conferenciers
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Exemple
Rails
Routage
[Link] Le systme de routage trouve le contrleur confrenciers Le contrleur interagit avec le modle
Contrleur conferenciers
Modle Active Record
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Exemple
Rails
Routage
[Link] Le systme de routage trouve le contrleur confrenciers Le contrleur interagit avec le modle
Contrleur conferenciers
Modle Active Record
Base de donnes
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Exemple
Rails
Routage
[Link] Le systme de routage trouve le contrleur confrenciers Le contrleur interagit avec le modle Le contrleur invoque la vue
Contrleur conferenciers
Affichage de la vue
Modle Active Record
Base de donnes
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Exemple
Rails
Routage
[Link] Le systme de routage trouve le contrleur confrenciers Le contrleur interagit avec le modle Le contrleur invoque la vue La vue assure le rendu du prochain cran du navigateur
Contrleur conferenciers
Affichage de la vue
Modle Active Record
Base de donnes
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Exemple
Rails
Routage
[Link] Le systme de routage trouve le contrleur confrenciers Le contrleur interagit avec le modle Le contrleur invoque la vue La vue assure le rendu du prochain cran du navigateur
Contrleur conferenciers
Affichage de la vue
Modle Active Record
Base de donnes
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Connexion au SGBD
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Connexion au SGBD Mapping Objet-Relationnel
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Connexion au SGBD Mapping Objet-Relationnel Gestion des relations entre les tables
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Connexion au SGBD Mapping Objet-Relationnel Gestion des relations entre les tables Plus de SQL crire
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
user = [Link]
Model
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
user = [Link]
Model
SHOW FIELDS FROM `users`
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
user = [Link] [Link] = "Richard Piacentini" [Link] = "Nuxos"
Model
SHOW FIELDS FROM `users`
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
user = [Link] [Link] = "Richard Piacentini" [Link] = "Nuxos" [Link]
Model
SHOW FIELDS FROM `users`
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
user = [Link] [Link] = "Richard Piacentini" [Link] = "Nuxos" [Link]
Model
SHOW FIELDS FROM `users`
INSERT INTO `users` (`name`, `company`) VALUES ('Richard Piacentini', 'Nuxos')
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
user = [Link] [Link] = "Richard Piacentini" [Link] = "Nuxos" [Link]
Model
SHOW FIELDS FROM `users`
INSERT INTO `users` (`name`, `company`) VALUES ('Richard Piacentini', 'Nuxos')
user = User.find_by_company("Nuxos")
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
user = [Link] [Link] = "Richard Piacentini" [Link] = "Nuxos" [Link]
Model
SHOW FIELDS FROM `users`
INSERT INTO `users` (`name`, `company`) VALUES ('Richard Piacentini', 'Nuxos')
user = User.find_by_company("Nuxos")
SELECT * FROM `users` WHERE company = "Nuxos" LIMIT 1
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
user = [Link] [Link] = "Richard Piacentini" [Link] = "Nuxos" [Link]
Model
SHOW FIELDS FROM `users`
INSERT INTO `users` (`name`, `company`) VALUES ('Richard Piacentini', 'Nuxos')
user = User.find_by_company("Nuxos")
SELECT * FROM `users` WHERE company = "Nuxos" LIMIT 1
[Link]
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
user = [Link] [Link] = "Richard Piacentini" [Link] = "Nuxos" [Link]
Model
SHOW FIELDS FROM `users`
INSERT INTO `users` (`name`, `company`) VALUES ('Richard Piacentini', 'Nuxos')
user = User.find_by_company("Nuxos")
SELECT * FROM `users` WHERE company = "Nuxos" LIMIT 1
[Link]
DELETE FROM `users` WHERE id = 2
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Classe
<----> Table de la BD
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Classe Objet
<----> Table de la BD <----> Enregistrement
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Classe Objet Attribut
<----> Table de la BD <----> Enregistrement <----> Champ de la table
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
users
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
# fichier modle app/models/[Link] class User < ActiveRecord::Base end
users
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
# fichier modle app/models/[Link] class User < ActiveRecord::Base end
users
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
# fichier modle app/models/[Link] class User < ActiveRecord::Base end
Classe <--> Table
users
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
# fichier modle app/models/[Link] class User < ActiveRecord::Base end
Classe <--> Table
users
id
name Paul Durand
Richard Piacentini
company
Orange
1 2
Nuxos
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
# fichier modle app/models/[Link] class User < ActiveRecord::Base end
Classe <--> Table
users
id
name Paul Durand
Richard Piacentini
company
Orange
1 2
Nuxos
user = User.find_by_company("Nuxos")
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
# fichier modle app/models/[Link] class User < ActiveRecord::Base end
Classe <--> Table
users
id
name Paul Durand
Richard Piacentini
company
Orange
1 2
Nuxos
user = User.find_by_company("Nuxos")
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
# fichier modle app/models/[Link] class User < ActiveRecord::Base end
Classe <--> Table
users
id
name Paul Durand
Richard Piacentini
company
Orange
1 2
Nuxos
Objet <--> Enregistrement
user = User.find_by_company("Nuxos")
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
# fichier modle app/models/[Link] class User < ActiveRecord::Base end [Link]
Classe <--> Table
users
id
name Paul Durand
Richard Piacentini
company
Orange
1 2
Nuxos
Objet <--> Enregistrement
user = User.find_by_company("Nuxos")
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
# fichier modle app/models/[Link] class User < ActiveRecord::Base end [Link]
Classe <--> Table
users
id
name Paul Durand
Richard Piacentini
company
Orange
1 2
Nuxos
Objet <--> Enregistrement
user = User.find_by_company("Nuxos")
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
# fichier modle app/models/[Link] class User < ActiveRecord::Base end [Link]
Classe <--> Table
[Link]
users
id
name Paul Durand
Richard Piacentini
company
Orange
1 2
Nuxos
Objet <--> Enregistrement
user = User.find_by_company("Nuxos")
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
# fichier modle app/models/[Link] class User < ActiveRecord::Base end [Link]
Classe <--> Table
[Link]
users
id
name Paul Durand
Richard Piacentini
company
Orange
1 2
Nuxos
Objet <--> Enregistrement
user = User.find_by_company("Nuxos")
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
# fichier modle app/models/[Link] class User < ActiveRecord::Base end [Link]
Classe <--> Table
[Link]
Attribut <--> Champ
users
id
name Paul Durand
Richard Piacentini
company
Orange
1 2
Nuxos
Objet <--> Enregistrement
user = User.find_by_company("Nuxos")
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Nom de la clef primaire : id
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Nom de la clef primaire : id Nom des table de la BD en minuscules et
au pluriel
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Nom de la clef primaire : id Nom des table de la BD en minuscules et
au pluriel Nom des classes Ruby au singulier, casse mixte
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
Model
Nom de la clef primaire : id Nom des table de la BD en minuscules et
au pluriel Nom des classes Ruby au singulier, casse mixte Fichiers modles au singulier, en minuscules
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
user_invoices id user_id amount
Model
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
user_invoices id user_id amount
Model
Table : user_invoices
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
user_invoices id user_id amount
Model
Table : user_invoices Fichier modle : app/models/user_invoice.rb
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
user_invoices id user_id amount
Model
Table : user_invoices Fichier modle : app/models/user_invoice.rb Classe Ruby : UserInvoice
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRecord
user_invoices id user_id amount
Model
class UserInvoice < ActiveRecord::Base end
Table : user_invoices Fichier modle : app/models/user_invoice.rb Classe Ruby : UserInvoice
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionController
Controller
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionController
Controller
1 mthode publique = 1 action
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionController
Controller
1 mthode publique = 1 action Gestion du routage
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionController
Controller
1 mthode publique = 1 action Gestion du routage Gestion des caches (page, action,
fragment)
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionController
Controller
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionController
Controller
1 action
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionController
Controller
1 action Plusieurs formats de rponse
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionController
Controller
1 action Plusieurs formats de rponse
# GET /users # GET /[Link] def index @users = [Link] respond_to do |format| [Link] # [Link] [Link] { render :xml => @users } end end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionController
Controller
GET /users
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionController
Controller
GET /users
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionController
Controller
GET /[Link]
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionController
Controller
GET /[Link]
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionView
View
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionView
View
Sparation entre format et rendu
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionView
View
Sparation entre format et rendu HTML, Javascript, atom, iPhone
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionView
View
Sparation entre format et rendu HTML, Javascript, atom, iPhone ERB, Builder, RJS
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionView
View
Sparation entre format et rendu HTML, Javascript, atom, iPhone ERB, Builder, RJS Gestion des layouts (gabarits)
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionView
View
Sparation entre format et rendu HTML, Javascript, atom, iPhone ERB, Builder, RJS Gestion des layouts (gabarits) Fichiers partiels
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionView
View
Sparation entre format et rendu HTML, Javascript, atom, iPhone ERB, Builder, RJS Gestion des layouts (gabarits) Fichiers partiels Nombreux Helpers
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionView
View
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionView
View
ERB : Embedded Ruby
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionView
View
ERB : Embedded Ruby Fichier avec extension .[Link]
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionView
View
ERB : Embedded Ruby Fichier avec extension .[Link] Accs aux variables dinstance du
contrleur
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionView
View
# code Ruby non affich dans la page <% %>
<% @[Link] |user| do %> # ici code HTML ou Ruby <% end %>
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionView
View
# code Ruby non affich dans la page <% %>
<% @[Link] |user| do %> # ici code HTML ou Ruby <% end %>
# code Ruby *affich* dans la page <%= %> <%= link_to 'Edit', edit_user_path(user) %>
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActionView
View
# code Ruby non affich dans la page <% %>
<% @[Link] |user| do %> # ici code HTML ou Ruby <% end %>
# code Ruby *affich* dans la page <%= %> <%= link_to 'Edit', edit_user_path(user) %>
<a href="/users/1/edit">Edit</a>
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Rails 3
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Performance
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Modularit
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Scuris par dfaut
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Prt pour HTML5
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
API publique
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Nouveaux Validateurs
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Nouveaux Validateurs
# Rails 2 class User < ActiveRecord::Base validates_presence_of :login, :email validates_length_of :login, :in => 3..20 validates_format_of :login, :with => /^[A-Z]\w+/i validates_uniqueness_of :email validates_length_of :email, :in => 5..100 validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Nouveaux Validateurs
# Rails 2 class User < ActiveRecord::Base validates_presence_of :login, :email validates_length_of :login, :in => 3..20 validates_format_of :login, :with => /^[A-Z]\w+/i validates_uniqueness_of :email validates_length_of :email, :in => 5..100 validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i end # Rails 3 class User < ActiveRecord::Base validates :login, :presence => true, :length => {:minimum => 3, :maximum => 20}, :format => {:with => /^[A-Z]\w+/i} validates :email, :presence => true, :length => {:minimum => 5, :maximum => 50}, :uniqueness => true, :format => {:with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i} end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Nouveaux Validateurs
# Rails 2 class User < ActiveRecord::Base validates_presence_of :login, :email validates_length_of :login, :in => 3..20 validates_format_of :login, :with => /^[A-Z]\w+/i validates_uniqueness_of :email validates_length_of :email, :in => 5..100 validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i end # Rails 3 class User < ActiveRecord::Base validates :login, :presence => true, :length => {:minimum => 3, :maximum => 20}, :format => {:with => /^[A-Z]\w+/i} validates :email, :presence => true, :length => {:minimum => 5, :maximum => 50}, :uniqueness => true, :format => {:with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i} end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Nouveaux Validateurs
# Rails 3 class User < ActiveRecord::Base validates :login, :presence => true, :length => {:minimum => 3, :maximum => 20}, :format => {:with => /^[A-Z]\w+/i} validates :email, :presence => true, :length => {:minimum => 5, :maximum => 50}, :uniqueness => true, :format => {:with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i} end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Nouveaux Validateurs
# Rails 3 class User < ActiveRecord::Base validates :login, :presence => true, :length => {:minimum => 3, :maximum => 20}, :format => {:with => /^[A-Z]\w+/i} validates :email, :presence => true, :length => {:minimum => 5, :maximum => 50}, :uniqueness => true, :format => {:with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i} end
:acceptance => Boolean :confirmation => Boolean :exclusion => { :in => Enumerable } :inclusion => { :in => Enumerable } :format => { :with => Regexp } :length => { :minimum => Fixnum, :maximum => Fixnum } :numericality => Boolean :presence => Boolean :uniqueness => Boolean
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveModel
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveModel
class Person attr_accessor :name
end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveModel
class Person attr_accessor :name include ActiveModel::Validations end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveModel
class Person attr_accessor :name include ActiveModel::Validations validates :name, :presence => true end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveModel
class Person attr_accessor :name include ActiveModel::Validations validates :name, :presence => true end p = [Link]
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveModel
class Person attr_accessor :name include ActiveModel::Validations validates :name, :presence => true end p = [Link] [Link]? # false
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveModel
class Person attr_accessor :name include ActiveModel::Validations validates :name, :presence => true end p = [Link] [Link]? # false
[Link] = "Richard Piacentini"
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveModel
class Person attr_accessor :name include ActiveModel::Validations validates :name, :presence => true end p = [Link] [Link]? # false
[Link] = "Richard Piacentini" [Link]? # true
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRelation
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRelation
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRelation
where having select group order limit
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
offset joins includes lock readonly from
ActiveRelation
# Rails 2 @users = [Link](:all, :conditions => { :active => true }
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRelation
# Rails 2 @users = [Link](:all, :conditions => { :active => true }
La requte est excute immdiatement dans la base de donnes
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRelation
# Rails 2 @users = [Link](:all, :conditions => { :active => true }
Array
La requte est excute immdiatement dans la base de donnes
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRelation
# Rails 2 @users = [Link](:all, :conditions => { :active => true }
Array
La requte est excute immdiatement dans la base de donnes
# Rails 3 @users = [Link](:active => true)
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRelation
# Rails 2 @users = [Link](:all, :conditions => { :active => true }
Array
La requte est excute immdiatement dans la base de donnes
# Rails 3 @users = [Link](:active => true)
Pas dappel la base de donnes
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRelation
# Rails 2 @users = [Link](:all, :conditions => { :active => true }
Array
La requte est excute immdiatement dans la base de donnes
# Rails 3 @users = [Link](:active => true)
ActiveRecord::Relation (lazy loading)
Pas dappel la base de donnes
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRelation
# Rails 3 @users = [Link](:created_at).where(company: "Nuxos", active: true)
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRelation
# Rails 3 @users = [Link](:created_at).where(company: "Nuxos", active: true)
@[Link] # => ActiveRecord::Relation
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRelation
# Rails 3 @users = [Link](:created_at).where(company: "Nuxos", active: true)
@[Link] # => ActiveRecord::Relation
@users.to_sql
# => SELECT "users".* FROM "users" WHERE ("users"."company" = 'Nuxos') AND ("users"."active" = 't') ORDER BY created_at
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRelation
@users = [Link](:created_at).where(company: "Nuxos", active: true)
# Rails 3
# Rails 2 @users = [Link](:conditions => ["company = ? AND active
= ?", "Nuxos", true], :order => :created_at)
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Named Scopes ++
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Named Scopes ++
# Rails 2
class User < ActiveRecord::Base named_scope :admin, :conditions => ["is_admin = ?", true] named_scope :activated, lambda { { :conditions => ["activated_at ?", [Link]] } } end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Named Scopes ++
# Rails 2
class User < ActiveRecord::Base named_scope :admin, :conditions => ["is_admin = ?", true] named_scope :activated, lambda { { :conditions => ["activated_at ?", [Link]] } } end
# Rails 3
class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ?", [Link]) } end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Named Scopes ++
# Rails 2
class User < ActiveRecord::Base named_scope :admin, :conditions => ["is_admin = ?", true] named_scope :activated, lambda { { :conditions => ["activated_at ?", [Link]] } } end
# Rails 3
class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ?", [Link]) } end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Named Scopes ++
# Rails 2
class User < ActiveRecord::Base named_scope :admin, :conditions => ["is_admin = ?", true] named_scope :activated, lambda { { :conditions => ["activated_at ?", [Link]] } } end
# Rails 3
class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ?", [Link]) } end
@admins = [Link] # => retourne tous les admin activs
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Named Scope ++
# Rails3
class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true)
scope :activated, lambda { where("activated_at ?", [Link]) }
end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Named Scope ++
# Rails3
class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true)
scope :activated, lambda { where("activated_at ?", [Link]) }
scope :recent_admins, [Link]("created_at DESC").limit(5) end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Named Scope ++
# Rails3
class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true)
scope :activated, lambda { where("activated_at ?", [Link]) }
scope :recent_admins, [Link]("created_at DESC").limit(5) end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Named Scope ++
# Rails3
class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true)
scope :activated, lambda { where("activated_at ?", [Link]) }
scope :recent_admins, [Link]("created_at DESC").limit(5) end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Named Scope ++
# Rails3
class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true)
scope :activated, lambda { where("activated_at ?", [Link]) }
scope :recent_admins, [Link]("created_at DESC").limit(5) end
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Named Scope ++
# Rails3
class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true)
scope :activated, lambda { where("activated_at ?", [Link]) }
scope :recent_admins, [Link]("created_at DESC").limit(5) end
@recent_admins = User.recent_admins
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Les scripts
Rails 2
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Les scripts
Rails 3
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Les scripts
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Les scripts
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Les scripts
alias r=rails
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Et aussi...
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Et aussi...
Nouvelle API de routage
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Et aussi...
Nouvelle API de routage Nouvelle architecture dActionController
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Et aussi...
Nouvelle API de routage Nouvelle architecture dActionController ActionMailer 3
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Et aussi...
Nouvelle API de routage Nouvelle architecture dActionController ActionMailer 3 Bundler
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Et aussi...
Nouvelle API de routage Nouvelle architecture dActionController ActionMailer 3 Bundler ...
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Bientt
Thursday, May 20, 2010
Pourquoi Rails ?
Thursday, May 20, 2010
Efficace
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Tests intgrs !
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Bonnes pratiques
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Tests intgrs !
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Nombreux plugins
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Tests intgrs !
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Ruby
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Et surtout...
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Thursday, May 20, 2010
Statistiques dutilisation des version de Rails
Janvier 2010
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Statistiques dutilisation des version de Rails
Janvier 2010
v2.3.4 v2.3.5 v2.3.3 v2.1.2 v2.3.2 v2.2.2 v2.1.0 Others
v2.3.5 14% v2.2.2 11% v2.3.3 7% 4% 3% Others 9%
v2.3.2 21%
v2.3.4 32.6%
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Statistiques dutilisation des version de Ruby
Janvier 2010
v1.8.6 v1.8.7 v1.9.1 v1.8.5
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Statistiques dutilisation des version de Ruby
Janvier 2010
v1.8.6 v1.8.7
v1.9.1 1%
v1.9.1 v1.8.5
v1.8.7 32%
v1.8.5 3% v1.8.6 63.5%
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Statistiques dutilisation des version de Ruby
Janvier 2010
v1.8.6 v1.8.7
v1.9.1 1%
v1.9.1 v1.8.5
v1.8.7 32%
v1.8.5 3% v1.8.6 63.5%
[Link]
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Littrature
Programming Ruby 1.9
The Ruby Way
The Well Design patterns en Ruby Grounded Rubyist
Ruby on Rails 4th edition
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Littrature
Programming Ruby 1.9
The Ruby Way
The Well Design patterns en Ruby Grounded Rubyist
Ruby on Rails 4th edition
De Ruby
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
...
Rails
Thursday, May 20, 2010
Merci :-)
Thursday, May 20, 2010
Des questions ?
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Ressources
Rails Guides : [Link] Railscasts : Peepcode : Railsfrance : [Link] [Link] ($) [Link] Scaling Rails : [Link]
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Crdit images Flicker
[Link] [Link] [Link] [Link] [Link] [Link] [Link]
Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010