Você está na página 1de 201

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
http://paris.onrails.info/conferenciers

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

Exemple
Rails
Routage

http://paris.onrails.info/conferenciers

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

Exemple
Rails
Routage

http://paris.onrails.info/conferenciers 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

http://paris.onrails.info/conferenciers 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

http://paris.onrails.info/conferenciers 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

http://paris.onrails.info/conferenciers 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

http://paris.onrails.info/conferenciers 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

http://paris.onrails.info/conferenciers 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 = User.new

Model

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

ActiveRecord
user = User.new

Model
SHOW FIELDS FROM `users`

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

ActiveRecord
user = User.new user.name = "Richard Piacentini" user.company = "Nuxos"

Model
SHOW FIELDS FROM `users`

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

ActiveRecord
user = User.new user.name = "Richard Piacentini" user.company = "Nuxos" user.save

Model
SHOW FIELDS FROM `users`

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

ActiveRecord
user = User.new user.name = "Richard Piacentini" user.company = "Nuxos" user.save

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 = User.new user.name = "Richard Piacentini" user.company = "Nuxos" user.save

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 = User.new user.name = "Richard Piacentini" user.company = "Nuxos" user.save

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 = User.new user.name = "Richard Piacentini" user.company = "Nuxos" user.save

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

user.destroy

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

ActiveRecord
user = User.new user.name = "Richard Piacentini" user.company = "Nuxos" user.save

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

user.destroy

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/user.rb class User < ActiveRecord::Base end

users

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

ActiveRecord

Model

# fichier modle app/models/user.rb class User < ActiveRecord::Base end

users

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

ActiveRecord

Model

# fichier modle app/models/user.rb 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/user.rb 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/user.rb 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/user.rb 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/user.rb 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/user.rb class User < ActiveRecord::Base end user.name


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/user.rb class User < ActiveRecord::Base end user.name


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/user.rb class User < ActiveRecord::Base end user.name


Classe <--> Table

user.company

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/user.rb class User < ActiveRecord::Base end user.name


Classe <--> Table

user.company

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/user.rb class User < ActiveRecord::Base end user.name


Classe <--> Table

user.company

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 /users.xml def index @users = Users.all respond_to do |format| format.html # index.html.erb format.xml { 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 /users.xml

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

ActionController

Controller

GET /users.xml

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 .html.erb

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

ActionView

View

ERB : Embedded Ruby Fichier avec extension .html.erb 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 <% %>

<% @users.each |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 <% %>

<% @users.each |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 <% %>

<% @users.each |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 = Person.new

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 = Person.new p.valid? # 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 = Person.new p.valid? # false

p.name = "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 = Person.new p.valid? # false

p.name = "Richard Piacentini" p.valid? # 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 = User.find(:all, :conditions => { :active => true }

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

ActiveRelation
# Rails 2 @users = User.find(: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 = User.find(: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 = User.find(:all, :conditions => { :active => true }

Array

La requte est excute immdiatement dans la base de donnes

# Rails 3 @users = User.where(:active => true)

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

ActiveRelation
# Rails 2 @users = User.find(:all, :conditions => { :active => true }

Array

La requte est excute immdiatement dans la base de donnes

# Rails 3 @users = User.where(:active => true)

Pas dappel la base de donnes


Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010

ActiveRelation
# Rails 2 @users = User.find(:all, :conditions => { :active => true }

Array

La requte est excute immdiatement dans la base de donnes

# Rails 3 @users = User.where(: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 = User.order(:created_at).where(company: "Nuxos", active: true)

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

ActiveRelation
# Rails 3 @users = User.order(:created_at).where(company: "Nuxos", active: true)

@users.class # => ActiveRecord::Relation

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

ActiveRelation
# Rails 3 @users = User.order(:created_at).where(company: "Nuxos", active: true)

@users.class # => 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 = User.order(:created_at).where(company: "Nuxos", active: true)

# Rails 3

# Rails 2 @users = User.all(: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 ?", Time.now] } } 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 ?", Time.now] } } end

# Rails 3
class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ?", Time.now) } 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 ?", Time.now] } } end

# Rails 3
class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ?", Time.now) } 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 ?", Time.now] } } end

# Rails 3
class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ?", Time.now) } end

@admins = User.admin.activated # => 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 ?", Time.now) }
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 ?", Time.now) }
scope :recent_admins, admin.activated.order("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 ?", Time.now) }
scope :recent_admins, admin.activated.order("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 ?", Time.now) }
scope :recent_admins, admin.activated.order("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 ?", Time.now) }
scope :recent_admins, admin.activated.order("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 ?", Time.now) }
scope :recent_admins, admin.activated.order("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%

http://railslab.newrelic.com/2010/01/07/state-of-the-stack-a-ruby-on-rails-benchmarking-report-7-january-2010
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 : http://guides.rubyonrails.org Railscasts : Peepcode : Railsfrance : http://railscasts.com http://peepcode.com ($) http://www.railsfrance.org Scaling Rails : http://railslab.newrelic.com/scaling-rails

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

Crdit images Flicker


http://www.flickr.com/photos/projekta8/2736962559/sizes/l/ http://www.flickr.com/photos/onkel_wart/4038437003/sizes/o/ http://www.flickr.com/photos/tiemposdelruido/4051814934/sizes/l/ http://www.flickr.com/photos/27889738@N07/3289774573/sizes/l/ http://www.flickr.com/photos/nomadiclass/4395155397/sizes/l/ http://www.flickr.com/photos/teddybare/133488169/ http://www.flickr.com/photos/mworrell/266180687/sizes/o/in/photostream/

Richard Piacentini et Laurent Julliard 2010 - Nuxos Group


Thursday, May 20, 2010

Você também pode gostar