Scaffold avec Ruby on Rails 2.0

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

Publié le 13 janvier 2008 à 15h39 Publié sous et Labels développement, ruby, code, rails, rubyonrails

À propos

Frédéric de Villamil

Je m'appelle Frédéric de Villamil, et quand je ne déploie pas ma mauvaise humeur et ma mauvaise foi sur le Web, je suis un super héros chargé de sauver le monde. Vous pouvez me suivre sur Twitter.

  1. Galy le 19 août 2009 à 19h03

    Si quelqu’un comprend le fonctionnement de scaffold après ton exemple il aura de la chance. Jusqu’à aujourd’hui tout ce que j’ai pu lire sur Scaffold n’est qu’une recopie pure et simple de chacun d’un texte sans doute en anglais

    “ruby script/generate scaffold Contact name:string email:string”

    Avec 2 champs on génére parfaitement un ecran web listant les enregistrements au de là tu m’expliques comment.

    Pour l’instant le Scaffold des versions initales ne fonctionne plus rendant malheureusement trés difficile d’emploi le livre de Dave Thomas qui s’appuie dessus.

    Quant à savoir comment il fonctionne maintenant c’est ce que j’attendais de ton article et que n’ai pas trouvé.

    “Nous copions le framework dans le répertoire vendor de notre application” :tu as bien raison, mais ce n’est pas le problème.

    “nous en profitons pour remplir dûment le fichier de configuration config/database.yml.”, pourquoi pas !

    A refaire.

  2. Kami le 13 mai 2010 à 20h46

    Pour moi cet article a le mérite d’être simple et permet d’avoir la méthodologie pour scaffold. il me convient tt à fait

Réagir à Scaffold avec Ruby on Rails 2.0

Afin de maintenir le niveau global de ce site, les commentaires font l'objet d'une politique de modération qualitative basée sur des critères non écrits et totalement subjectifs, donc injustes.

Les commentaires écrits en langage SMS, inutiles, déplacés, injurieux ou relevant du spam seront systématiquement supprimés sans avertissement préalable.

Les trackbacks sont fermés pour cause de spam.