Anda di halaman 1dari 50

Présentation de

Ruby on Rails
Rencontres Mondiales du Logiciel Libre,
Mont-de-Marsan, vendredi 4 juillet 2008

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Avant-propos :: présentation de l’orateur

Guillaume “Zifro” DESRAT


<guillaume.desrat@rubyfrance.org> && http://zlab.fr/

• Rubyiste depuis 2002


• Railer depuis 2005

• Président de l’association (http://www.rubyfrance.org/)


• participe aux discussions sur les listes RubyFR et RailsFrance
• répond à vos questions sur #rubyfr @ irc.freenode.net

• consultant informatique au Luxembourg


• en mission chez une banque d’investisseurs
RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT
Avant-propos :: objet de la conférence

Présentation de
Ruby on Rails
Rencontres Mondiales du Logiciel Libre,
Mont-de-Marsan, vendredi 4 juillet 2008
• un tour d’horizon de Ruby on Rails
• les concepts, les principes mis en oeuvre
• un aperçu du code
RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT
Qu’est-ce que Ruby on Rails ?

Ruby on Rails, c’est :

• un framework pour développer des applications Web


• écrit en Ruby
• basé sur le concept MVC
• orienté conventions plutôt que configuration
• libre ! disponible sous licence MIT

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Qu’est-ce que Ruby on Rails ?

Ruby on Rails, c’est :

• le travail (entre autres !) de David Heinemeier Hansson


• la version 1.0 en décembre 2005
• la version 2.0 en décembre 2007
• un noyau allégé
• plus de fonctionnalités sous forme de plugins
• REST
• une version 2.1 le 1er juin 2008
• des efforts sur la gestion des TimeZone
• les “Dirty Objects” (gestion des modifications)

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : basé sur MVC

MVC

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : basé sur MVC

Modèle - Vue - Contrôleur

• un modèle pour la persistance des données


• une vue pour l’interface utilisateur
• un contrôleur pour coordonner le tout
• une idée de Trygve Reenskaug, en... 1979
• initialement pensé pour les applications de bureau
• adapté au Web par la suite

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : basé sur MVC

Architecture MVC pour le Web : Base de


données

2 Modèle
1
Navigateur 3

Contrôleur
6

Vue

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : basé sur MVC

Des URL différentes :

http://zlab.fr/books/show/1

• site Web : zlab.fr


• contrôleur : Books
• action : show
• un paramètre, id, qui vaut 1
• une convention ( ), paramétrable

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : des conventions ( )

Conventions
vs.
Configuration
RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT
Ruby on Rails : des conventions ( )

Ruby on Rails privilégie l’utilisation de conventions


plutôt que l’emploi de fichiers de configuration :

• des comportements par défaut qui se posent en standard


• moins de code, donc moins d’erreurs possibles
• des conventions que l’on peut ignorer, au besoin

Un fichier de configuration tout de même, pour la


connexion aux bases de données (format YAML)
pment:
develo
r: oci
adapte fro
me: zi schlop
userna ubycle
d : r and
passwo
r
b e e rased
SERVER will n 'r
host: d a s 'test' w h e n you ru
defin e tabase uctio
h e d a tabase e l o p m ent da e n t o r prod
ing: T ur dev elopm
# Warn e d f rom yo s a m e as dev
enera t to the
# re-g e t t h is db
ot s
# Do n
test:
r: oci
adapte fro
me: zi -des-t
ests
userna r i v e z
rd: ec
passwo
RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT
Ruby on Rails : des conventions ( )

Architecture sur le disque :

• une structure de fichiers complète


zlab.fr:~/rmll zifro$ ls demo
README config lib script vendor
Rakefile db log test
app doc public tmp

• MVC : séparation des modèles, vues et contrôleurs


zlab.fr:~/rmll zifro$ ls demo/app
controllers helpers models views

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : basé sur MVC

ActiveRecord

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActiveRecord

ActiveRecord, c’est :

• le M dans MVC
• un Object Relational Mapper
• les tables sont représentées par des classes
• les enregistrements par des objets
• les champs par des attributs
<Book>
id = 1
title = ‘The Ruby Way’
Table “Books” author = ‘Hal Fulton’
id title author
1 The Ruby Way Hal Fulton <Book>
id = 2
2 Ruby for Rails David A. Black title = ‘Ruby for Rails’
author = ‘David A. Black’

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActiveRecord

Définition du modèle “Book”, pour représenter les livres


enregistrés dans la base de données :

class Book < ActiveRecord::Base


end

• convention : une classe correspond à une table portant le


même nom au pluriel
• inutile de définir les attributs, ActiveRecord les lit directement
dans la base de données

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActiveRecord

On ne manipule que des objets Ruby :

• création d’un objet : b = Book.new

• initialisation de ses attributs : b.title = 'Agile Web Development with Rails'


b.author = 'Dave Thomas & David Heinemeier Hansson'

• lecture des attributs : b.title # renvoie 'Agile Web Development with Rails'

• sauvegarde de l’objet : b.save # renvoie true ou false


b.save! # lève une exception en cas d’erreur

• création et sauvegarde : b.create :title => 'Ruby in a Nutshell', :author => 'Matz'

• suppression : b.delete

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActiveRecord

ActiveRecord, c’est aussi :

• des méthodes pour interroger les modèles (des “finders”)


Table “Books” class Book < ActiveRecord::Base
id title author end
1 The Ruby Way Hal Fulton
2 Ruby for Rails David A. Black

b = Book.find 1
b = Book.find :first, :conditions => ['title LIKE ?', '%Ruby%']
b = Book.find :all, :conditions => ['title LIKE ?', '%Ruby%']
b = Book.find_by_author 'Hal Fulton'
b = Book.find_by_title 'Ruby for Rails'

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActiveRecord

ActiveRecord, c’est aussi :

• la description des relations entre les modèles


class Book < ActiveRecord::Base
belongs_to :category
end

class Category < ActiveRecord::Base


end

Table “Books” Table “Categories”


id title author category_id id label
1 The Ruby Way Hal Fulton 1 1 Computing
2 Ruby for Rails David A. Black 1 2 Fiction

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActiveRecord

Ce qui permet d’écrire :


b = Book.find_by_title 'Ruby for Rails'
b.category.label

c = Category.find_by_label 'Fiction'

b = Book.create :title => 'Winter Hauntering',


:author => 'Dan Simmons',
:category_id => c.id

b = Book.new
b.title = 'The man who disappears'
b.author = 'Jeffery Deavers'
b.category = c
b.save

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActiveRecord

Pour traverser la relation depuis l’autre modèle :

class Book < ActiveRecord::Base


belongs_to :category
end

class Category < ActiveRecord::Base


has_many :books
end

Table “Books” Table “Categories”


id title author category_id id label
1 The Ruby Way Hal Fulton 1 1 Computing
2 Ruby for Rails David A. Black 1 2 Fiction

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActiveRecord

Ce qui permet d’écrire :

c = Category.find_by_label 'Computing'
c.books

b = Book.create :title => 'Hyperion',


:author => 'Dan Simmons'
fiction = Category.find_by_label 'Fiction'
fiction.books << b
fiction.books.find :all,
:conditions => ['author = ?', 'Dan Simmons']

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActiveRecord

ActiveRecord, c’est aussi :

• des méthodes pour valider les données du modèle


class Book < ActiveRecord::Base

belongs_to :category

validates_presence_of :title, :author


validates_length_of :title, :minimum => 2

def validate
self.errors.add :author, ’Not actually an author’
if self.author == 'Why the luck stiff'
end

end

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : basé sur MVC

ActionView

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActionView

ActionView, c’est :

• le V dans MVC
• un système de génération d’interface Web, avec :
• des layouts (gabarits)
• des pages qui s’intègrent dans les layouts
• des balises spécifiques pour intégrer du code Ruby (eRB)
• des fichiers .rhtml dans app/views/

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActionView

Exemple de layout :
<html>
<head>
<title>RMLL : Ruby on Rails demo</title>
</head>
<body>
<%= yield %>
</body>
</html>

• permet de partager une charte graphique, une présentation,


entre plusieurs pages
• <%= yield %> est remplacé par le contenu de la vue qui est
rendue

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActionView

Exemple de vue :
<h1>Titre du livre</h1>
par <i>Auteur du livre</i>

<% date = Time.now %>


<% if date.hour < 12 %>
page générée le matin du
<% else %>
page générée l'après-midi du
<% end %>
<%= date.strftime '%d/%m' %>

• le code Ruby entre <% et %> est exécuté


• le code Ruby entre <%= et %> est exécuté et sa sortie
standard est écrite dans la vue

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActionView

Page générée :
<html>
<head>
<title>RMLL : Ruby on Rails demo</title>
</head>
<body>
<h1>Titre du livre</h1>
par <i>Auteur du livre</i>

page générée l’après-midi du 04/07
</body>
</html>

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActionView

La même vue, dynamique :


<h1><%= @book.title %></h1>
par <i><%= @book.author %></i>

<% date = Time.now %>


<% if date.hour < 12 %>
page générée le matin du
<% else %>
page générée l'après-midi du
<% end %>
<%= date.strftime '%d/%m' %>

• la vue a accès aux variables du contrôleur


• elle ne contient normalement aucune logique
• si beaucoup de code est nécessaire pour un affichage, les
helpers prennent le relais
RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT
Ruby on Rails : ActionView

L’autre facette d’ActionView :

<%= link_to 'Livre suivant',


:controller => 'books',
:action => 'show',
:id => (params[:id] + 1) %>

• remplace avantageusement les <a>


• plus on utilise ActionView... moins on écrit d’HTML

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActionView

ActionView, c’est aussi :

• la possibilité de faire de l’AJAX (classique et RJS)


• la possibilité d’utiliser Prototype et script.aculo.us
• sans écrire une ligne de Javascript, seulement du Ruby

<%= link_to_remote "<h1>#{@book.title}</h1>", :update =>


'author', :url => { :action => :update_author } %>
par <i id="author">auteur</i>

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : basé sur MVC

ActionController

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActionController

ActionController, c’est :

• le C dans MVC
• le chef d’orchestre
• il contient la logique de l’application
• il interroge le modèle
• manipule les données récupérées
• détermine la vue à afficher à l’utilisateur

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActionController

Définition du contrôleur “Books”, pour afficher les livres


enregistrés dans la base de données :

class BooksController < ApplicationController


def show
end
end

• le contrôleur est une classe


• l’action est une méthode
• le nom de l’action permet de déduire la vue à rendre

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActionController

http://zlab.fr/books/show/1
Base de
données
class BooksController < ApplicationController
def show
end
end

2 Modèle
1
Navigateur 3

Contrôleur
6

Vue

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActionController

Définition du contrôleur “Books”, pour afficher les livres


enregistrés dans la base de données :
class BooksController < ApplicationController

def show
@book = Book.find params[:id]
end

end

• le contrôleur interroge le modèle


• à la fin de l’exécution, la vue est rendue, dans le layout

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActionController

Gestion d’un paramètre “id” qui puisse être inexistant dans la


base de données :
class BooksController < ApplicationController

def show
begin
@book = Book.find params[:id]
render :layout => 'special'
rescue
redirect_to :controller => 'error', :action => 'raised',
:id => params[:id]
end
end

end

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActionController

Suppression d’un livre :


class BooksController < ApplicationController

def show
# ...
end

def delete
@book = Book.find params[:id]
if @book.delete
redirect_to :action => 'list'
else
flash[:notice] = 'Erreur à la suppression'
render :action => 'show'
end
end

end
RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT
Ruby on Rails

ActiveSupport

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActiveSupport

ActiveSupport, c’est :

• le S dans Sympathique
• des extensions des classes de base de Ruby
• pour simplifier le développement
• améliorer la lisibilité du code

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : ActiveSupport

ActiveSupport, c’est :
1.kilobyte # => 1024
1.megabyte # => 1048576

2.days.before # => Fri Jul 02 16:37:16 +0200 2008


1.day.from_now # => Fri Jul 05 16:37:16 +0200 2008
7.days + 1.week # => 1209600
1.year / 1.day # => 365

nil.blank? # => true


''.blank? # => true
{}.blank? # => true
[].blank? # => true

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails

Mais encore ?
(ce dont je n’ai pas le temps de vous parler)

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ruby on Rails : mais encore ?

Ruby on Rails, c’est :

• un framework qui intègre les tests dès le départ


• ActionMailer
• des Web services REST
• ActiveResource
• plusieurs systèmes de templating pour ActionView
• des plugins pour quasiment tout ce qui peut être nécessaire
• du code Ruby qu’il est bon de lire
RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT
Ruby on Rails : ressources

Ressources

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ressources en Anglais

Sites Web :
• le site officiel Ruby on Rails (http://www.rubyonrails.org/)
• le site officiel Ruby (http://www.ruby-lang.org/)
• les sites et blogs axés “Web 2.0” (PeepCode, ...)

Listes de diffusion :
• les listes officielles @rubyonrails.org
• Ruby-Talk et Ruby-Core @ruby-lang.org

Groupe de discussion :
• comp.lang.ruby

IRC :
• #rubyonrails sur le réseau Freenode
• #ruby-lang sur le même réseau

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ressources en Anglais

Livres :
• Agile Web Development with Rails, 2nd edition, (The Pragmatic Programmers)

• The Rails Way, Obie Fernandez (Addison-Wesley)


• Advanced Rails Recipes, Mike Clark (The Pragmatic Programmers)
• Programming Ruby, Dave Thomas (The Pragmatic Programmers)
• The Ruby Way, Hal Fulton (Addison Wesley)

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Ressources en Français

Sites Web :
• le portail RailsFrance (http://www.railsfrance.org/)
• le portail RubyFrance (http://www.rubyfrance.org)
• le site officiel Ruby, en Français (http://www.ruby-lang.org/fr/)
• les nombreux blogs de la communauté francophone
• http://boldr.org/, de Nicolas Mérouze
• http://frederic.logier.org/, de Frédéric Logier
• http://blog.shingara.fr/, de Cyril Mougel
• ...

Listes de diffusion :
• RailsFrance, groupe Google (http://groups.google.com/)
• RubyFR-public, groupe Google

Groupe de discussion :
• fr.comp.lang.ruby

IRC :
• #rubyonrails.fr et #rubyfr sur le réseau Freenode
RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT
Ressources en Français

Livres :
• Ruby on Rails, 2ème édition, Dave Thomas & David Heinemeier Hansson (Eyrolles)
• Ruby et Rails, David A. Black (CampusPress)
• Pratique de Ruby on Rails, Eric Sarrion (O’Reilly)
• Recettes Rails, Chad Fowler (CampusPress)
• Ruby par l’exemple, Lucas Carlson & Leonard Richardson (O’Reilly)
• Débuter en programmation avec Ruby, Chris Pine (CampusPress)

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


C’est fini...

Des questions ?

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


C’est fini...

Merci !

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT


Licence de ce document

Vous êtes libres de reproduire, distribuer et communiquer


cette création au public, selon les conditions suivantes :
• Paternité
• Vous devez citer le nom de l'auteur original de la manière indiquée par l'auteur de l'oeuvre ou le titulaire des droits qui vous confère cette autorisation
(mais pas d'une manière qui suggérerait qu'ils vous soutiennent ou approuvent votre utilisation de l'oeuvre)

• Pas d’utilisation commerciale


• Vous n'avez pas le droit d'utiliser cette création à des fins commerciales

• Pas de modification
• Vous n'avez pas le droit de modifier, de transformer ou d'adapter cette création.

• résumé explicatif disponible sur http://creativecommons.org/licenses/by-nc-nd/2.0/fr/

• vous êtes autorisés à réutiliser le logo Ruby France employé dans cette présentation, pour
faire référence à l’association

RMLL 2008 - Présentation de Ruby on Rails - Guillaume “Zifro” DESRAT

Anda mungkin juga menyukai