La création d’applications ultra rapide et de manière particulièrement impressionnante grâce au scaffolding a été pour beaucoup dans le succès du framework de développement web Ruby on Rails. Cette méthode, francisée en un peu élégant échafaudage permet de générer automatiquement une application en fonction de son schéma de base de donnée, permettant d’implémenter immédiatement tout ce qu’il faut pour faire du CRUD (create, read, update, delete). Le scaffolding est donc particulièrement utile pour commencer très rapidement une application et permettre immédiatement la saisie des données par les utilisateurs à venir.

L’arrivée de Ruby on Rails 2.0 a entraîné pas mal de changements dans l’existant, en supprimant notamment la possibilité de générer son CRUD à la volée avec la directive :scaffold dans un controller. Cette dernière permettait de créer son application à la volée chaque fois qu’un utilisateur souhaitait y accéder sans avoir à créer tous les fichiers nécessaires.

On commence par créer une application Rails. Rails 2.0 introduit SQLite comme base de données par défaut, on va donc spécifier que l’on veut travailler avec MySQL. Rails crée un répertoire nommé mykillerapp et y copie tous les fichiers nécessaires.

  7el.net:~/Documents/code/typo/trunk$ rails mykillerwebapp -d 
  7el.net:~/Documents/code/typo/trunk$ cd mykillerwebapp
  7el.net:~/Documents/code/typo/trunk$ rake rails:freeze:gems

La dernière ligne, rake rails:freeze:gems ne va pas directement nous servir, mais c’est une bonne habitude à prendre. Nous copions le framework dans le répertoire vendor de notre application. Ainsi, nous sommes certains que celle-ci tournera quelle que soit la version de Rails installée sur la machine de déploiement. Et pendant que Rails se copie gentiment, nous en profitons pour remplir dûment le fichier de configuration config/database.yml.

  7el.net:~/Documents/code/typo/trunk$ ./script/generate scaffold user\ 
    login:string\ 
    password:string\ 
    email:string \
    presentation:text\ 
    group_id:integer
        exists  app/models/
        exists  app/controllers/
        exists  app/helpers/
        create  app/views/users
        exists  app/views/layouts/
        exists  test/functional/
        exists  test/unit/
        create  app/views/users/index.html.erb
        create  app/views/users/show.html.erb
        create  app/views/users/new.html.erb
        create  app/views/users/edit.html.erb
        create  app/views/layouts/users.html.erb
        create  public/stylesheets/scaffold.css
    dependency  model
        exists    app/models/
        exists    test/unit/
        exists    test/fixtures/
        create    app/models/user.rb
        create    test/unit/user_test.rb
        create    test/fixtures/users.yml
        create    db/migrate
        create    db/migrate/001_create_users.rb
        create  app/controllers/users_controller.rb
        create  test/functional/users_controller_test.rb
        create  app/helpers/users_helper.rb
         route  map.resources :users

Nous venons de créer le modèle, la vue et le contrôleur correspondant à la table utilisateurs de notre application. L’utilisateur se définit par un identifiant, un mot de passe, un email, une description et l’appartenance à un groupe. Nous avons également généré un fichier de migration qui va nous permettre de créer la table idoine. Nous allons maintenant créer la base de données et charger le fichier de migration.

  7el.net:~/Documents/code/typo/trunk$ rake db:drop:all
  7el.net:~/Documents/code/typo/trunk$ rake db:create:all
  7el.net:~/Documents/code/typo/trunk$ rake db:migrate

Rails 2.0 introduit la création de la base dans les taches rake. Nous créons les bases de test, développement et production, puis nous chargeons la migration dans la base de développement. Nous allons maintenant lancer le serveur d’application et commencer à inscrire nos utilisateurs :

  7el.net:~/Documents/code/typo/trunk$ ./script/server

Voilà, c’est fait, votre application est maintenant accessible sur http://localhost:3000/users

Perry the Platypus wants you to subscribe now! Even if you don't visit my site on a regular basis, you can get the latest posts delivered to you for free via Email: