Ruby On Rails
Ruby On Rails
Avant propos
On supposera installé et correctement configuré :
- un SGBD supporté par RoR (personnellement, j'utilise MySQL) - Ruby - Rails et ses dépendances
Il vous faudra aussi des notions de ruby.
Mise en place de l'environnement
$ rails monsite
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
[...]
Le répertoire monsite vient d'être créé ainsi que la structure initiale du projet. Entrez maintenant dans ce répertoire.
app
components
config
db
doc
lib
log
public
Rakefile
README
script
test
tmp
vendor
Configuration
Si vous n'avez pas de base de donnée, créez-en :
mysql> create database monsite_development;
mysql> create database monsite_test;
mysql> create database monsite_production;
Note : J'en ai crée 3 pour pouvoir utiliser 3 environnements différents. Une seule peut suffir, ca dépend de ce que vous voulez faire.
Nous allons ensuite éditer ./config/database.yml. Vous avez 3 environnements de pré-configurées de la sorte :
production:
adapter: mysql
database: monsite_production
username: root
password:
host: localhost
Editez-le en fonction des paramètres de votre base de donnée
production:
adapter: mysql
database: monsite_production
username: gedsismik
password: mypassord
host: localhost
socket: /var/run/mysql/mysql.sock
Note : Sous Slackware, j'ai du ajouter la ligne socket: /var/run/mysql/mysql.sock
sinon il ne trouve pas la socket MySQL.
Modèle MVC
Ruby On Rails utilise le motif de conception MVC (modèle-vue-contrôleur). Je m'explique : dans un projet RoR, vous séparez :
- les modèles (répertoire./app/models
) : ce qui concerne les données. Dans notre cas, c'est donc principalement les tables des bases de données. - les vues (répertoire./app/views
) : ce qui concerne l'interface. Dans notre cas, il s'agit de la présentation des pages (en HTML et Ruby embarqué, nous verrons ça plus tard). - les contrôleurs (répertoire./app/controllers
) : concerne la gestion des évenements. Dans notre cas, ce sont les classes qui feront le lien entre les tables (models) et le html (views). Ce qui revient aux appels aux tables via les modèles et la création de variables dont le contenu sera affiché dans les vues.
Pour palier à certaines fonctions qui ne peuvent pas suivre le modèle MVC à la lettre, Rails dispose d'une partie appelée helpers (./app/helpers
) qui contient des classes accessibles aux vues et qui contient du code ayant accès aux modèles sans passer par les contrôleurs.
Création des modèles
Génération des fichiers relatifs à la table
On va utilisez le script ./script/generate
pour générer la première table.
$ ./script/generate model livre
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/livre.rb
create test/unit/livre_test.rb
create test/fixtures/livres.yml
create db/migrate
create db/migrate/001_create_livres.rb
$ ./script/generate model auteur
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/auteur.rb
create test/unit/auteur_test.rb
create test/fixtures/auteurs.yml
exists db/migrate
create db/migrate/002_create_auteurs.rb
Fichiers de migration
Les fichiers de migration/création de table se trouvent dans ./db/migrate
. Il va falloir les éditez pour ajoutez les champs que vous voulez.
Note : ne faites pas de champ "id", ils sont automatiquement créés et gérer par Rails.
Fichier ./db/migrate/001_create_livres.rb
class CreateLivres < ActiveRecord::Migration
def self.up
create_table :livres do |t|
t.column :titre, :string, :null => false
t.column :auteur_id, :integer, :null => false
t.column :quantite, :integer, :default => "1"
end
end
def self.down
drop_table :livres
end
end
Fichier ./db/migrate/002_create_auteurs.rb
class CreateAuteurs < ActiveRecord::Migration
def self.up
create_table :auteurs do |t|
t.column :nom, :string
t.column :prenom, :string
end
end
def self.down
drop_table :auteurs
end
end
./db/migrate/001_initial.rb
class Initial < ActiveRecord::Migration
def self.up
create_table :livres do |t|
t.column :titre, :string, :null => false
t.column :auteur_id, :integer, :null => false
t.column :quantite, :integer, :default => "1"
end
create_table :auteurs do |t|
t.column :nom, :string, :null => false
t.column :prenom, :string
end
end
def self.down
drop_table :livres
drop_table :auteurs
end
end
Génération des tables
Toujours dans le repertoire monsite, exécutez rake migrate
.
$ rake migrate
(in /home/gedsismik/monsite)
CreateLivres: migrating ==================================================
-- create_table(:livres)
-> 0.0441s
CreateLivres: migrated (0.0442s) =========================================
CreateAuteurs: migrating =================================================
-- create_table(:auteurs)
-> 0.0457s
CreateAuteurs: migrated (0.0458s) ========================================
Si vous regardez dans votre base de donnée, vous trouverez donc 3 tables :
- auteurs - livres - schema_info
Cette dernière table contient en fait la version de la base de donnée. Les versions sont incrémentées lors du ./script/generate model <nom table>
et sont contenus dans le nom du fichier ./db/migrate/001_initial.rb
est donc la version 1 de la base.