3
mai 09Concevoir une application Ruby on Rails (2.0)
Ruby on Rails (RoR) est un framework web dont nous allons illustrer la puissance en créant une simple application de gestion de vidéothèque, en minimisant les lignes de code. Nous utiliserons sa version 2.0, sortie le 7 décembre 2008, et qui possède plusieurs différences avec la précédente, notamment au niveau de la génération du code (Scaffold).
Nous verrons tout d’abord comment installer Ruby on Rails en local ou le lancer depuis un serveur distant. Puis, nous présenterons les concepts de base de développement en créant nos modèles de données et en personnalisant les vues.
Installer Ruby on Rails
En local
Sous debian / ubuntu, mettez vous en superutilisateur pour installer ruby :
apt-get install ruby irb ri rdoc build-essantial
Puis, la gem rails :
gem install rails --include-dependencies
Vérifions la version de rails installée :
rails –v
Sur un serveur distant
Si vous utilisez un serveur supportant ruby avec rails préinstallé, comme c’est le cas chez alwaysdata par exemple, vous n’avez rien à faire. Vous pouvez vous passer du serveur de développement intégré à RoR. Par contre, vous devrez effectuer toutes les commandes suivantes via un connexion ssh.
Utiliser Rails
Créer l’application
Pour créer une nouvelle application, placez-vous dans votre dossier personnel. Une simple commande vous permettra de générer toutes l’arborescence du futur projet, que nous nommerons myMovies.
rails myMovies
Lancer le serveur
Si vous travaillez en local, vous devrez lancer le serveur de développement intégré à RoR, WEBrick, pour que votre application soit accessible. Pour ce faire, tapez simplement :
ruby script/serverUne fois le serveur lancé, votre site sera accessible à l’adresse :
http://localhost:3000
Si vous travaillez sur un serveur distant, vous pourrez normalement visualiser directement votre application sans passer par le lancement manuel de WEBrick.
Créer et configurer la base
Par le biais de votre SGBD, commencez par créer une base de données pour votre projet, nommée – par exemple – myMovies.
Configurons maintenant l’accès à cette base, en éditant le fichier /myMovies/config/database.yml en renseignant le moteur (ici mySQL) l’hôte, l’utilisateur mySQL et le mot de passe. Note : il est possible de différencier les bases de développement et de production.
Une fois l’application configurée, on pourra simplement créer la base grâce à la commande :
rake db:create:all
Créer un modèle
Cette étape est cruciale car elle détermine toute l’architecture des données de notre application. Vous devrez déterminer toutes les entités qu’il vous sera nécessaire de stocker. D’une mauvaise conception découlerait une application bancale. Dans notre cas, la question ne se pose pas car nous avons choisi un cas de figure particulièrement simple. Nous n’avons à travailler que sur un seul modèle : movie. Bien sûr, il sera possible d’ajouter des entités plus tard (des commentaires, par exemple), mais faisons simple pour commencer.
Maintenant, réfléchissons sur le données que nous avons besoin de stocker pour chaque modèle : le titre du film, son réalisateur, l’année de sortie, une brève description et une url permettant d’en savoir plus (un lien imdb par exemple). Pour cela, lançons la commande :
ruby script/generate scaffold Movie title:string director:string year:string decription:text url:stringNous lançons ainsi le scaffold qui va générer tout le code lié à ce modèle, de la table dans la base de donnée aux vues génériques destinées à son affichage. Nous avons juste à mettre à jour la base de données :
rake db:migrate
L’interface générée
Voyons maintenant ce que nous avons généré avec cette simple commande. Après avoir lancé le serveur, allez sur
http://localhost:3000/movies
Nous avons maintenant une veritable interface CRUD pour l’ajout et l’édition de films. Essayez d’ajouter un nouveau film ; il apparaitra dans la liste et vous pourrez l’éditez ou le supprimer.
Validation du modèle
On peut aller plus loin dans la création du modèle. Si certaines des données sont obligatoire au bon fonctionnement de l’application, comment empêcher la saisie d’entrées incorrectes et mal formées ? C’est là qu’intervient la validation du modèle. Pour cela, ouvrez le modèle proprement dit, stocké dans le fichier /myMovies/app/models/movies.rb. Pour l’instant, le fichier est quasiment vide, et c’est normal. C’est ici que nous allons renseigner les informations relatives à la validation. Au sein de la classe, tapez (attention à la place des espaces) :
validates_presence of :title, :director, :year
C’est tout ! Dans l’application, essayez de saisir un film sans réalisateur ou sans date ; l’enregistrement échouera. Finis, les tests bancaux : tout est automatisé grâce RoR !
Personnaliser l’application
Comme vous pouvez le voir, sans que nous n’ayons besoin d’écrire la moindre véritable ligne de code, RoR nous a généré une interface complète CRUD (Create, Read, Update, Delete) pour notre modèle. On peut aisément ajouter des nouveaux films, éditer ou supprimer les existants, et visualiser le tout en détails. Libre à nous de personnaliser les vues grâce au système de templates que nous allons voir maintenant.
Vous l’avez vu, l’habillage de l’interface est très sommaire. A nous de l’adapter et de l’intégrer dans un design complet. Pour cela, rien de compliqué ; il ne s’agit que de XHTML / CSS standard. Regardez dans le dossier /myMovies/app/views/movie/ : c’est ici que sont cachés les templates correspondant aux vues pour notre modèle. On y retrouve les différentes actions possibles : l’affichage détaillé (show.html.erb), l’édition (edit.html.erb), l’ajout (new.html.erb) et enfin la liste en page d’accueil (index.html.erb).
Ces templates sont incorporés dans une mise en page globale, définie elle par le ficher myMovies/app/views/layouts/movies.html.erb par le biais de la ligne <%= yield>. Vous pouvez ainsi modifier vos différentes vues, de la structure HTML au CSS (stocké dans /public/stylesheets) en mettant les mains dans le cambouis un minimum…
Aller plus loin
Voici une application de test mise en place à partir de ce tutoriel : myMovies.
Si vous souhaitez en savoir plus sur Ruby on Rails, vous pouvez consulter ce dossier, rédigé par Mathieu Thibault, Vincent Navetat et moi-même pour un cours de l’IMAC.



De rien, M. le Bot.
Valentin le 4 mai 2009 Ã 17:15
Scaffold, pas scafford, non ?
Le lien vers le PDF pour en savoir plus ne fonctionne pas.
Ishiro le 4 mai 2009 Ã 20:50
Me fait penser que je devrais également publier le dossier « web sémantique ». Enfin ce dernier requiert vulgarisation et découpage..
Samuel Martin le 4 mai 2009 Ã 23:32
@Sam : Ca serait intéressant oui !
@Ishiro : Oui, scaffold, bien sûr ^^ Merci, c’est corrigé, tout comme le lien du PDF.
Valentin le 4 mai 2009 Ã 23:35