1) Première chose à faire: se placer dans le répertoire désiré (avec le terminal), et taper:
ruby nomDuProgramme
un sous-répertoire est automatiquement créé avec ce nom, et rempli par Ruby des fichiers nécessaires.
2) Lancer le serveur: se placer dans le répertoire créé, et taper:
"./script/server"
Le serveur indique l'adresse de l'application:
http://0.0.0.0:3000
Elle ne fonctionne pas forcément, dans ce cas socket unix:
http://localhost:3000/
Cf:
http://developer.apple.com/tools/rubyonrails.html
Tester cette adresse dans un navigateur.
3) Laisser tourner le serveur et créer une nouvelle session de terminal. Se placer avec cette nouvelle session dans le répertoire de l'application Ruby.
4) Créer un controller
Ouvrir: app/controlers/application.rb
Constater que le fichier est vice.
Le générer en tapant dans le terminal:
"./script/generate controller"
"./script/generate controller nomDuProgramme"
Un fichier vide s'est créé: app/controllers/nomDuProgramme_controller.rb
Il est accessible à:
http://localhost:3000/nomDuProgramme, mais il n'a pour l'instant pas d'action (message d'erreur "Unknown action")
Un autre fichier vide a été créé: app/helpers/nomDuProgramme_helper.rb
5) Créer une action.
Ouvrir "nomDUProgramme_controller.rb" et définir la méthode suivante à l'intérieur de la classe:
def index
render :text => "Hello World !"
end
L'action "index" est la première action exécutée (le constructeur en quelque sorte). Tester en rechangeant la page dans le navigateur, puis supprimer ces lignes de code: on passe à autre chose, les templates.
6) Créer un template
Créer le fichier "index.rhtml" dans views/nomDuProgramme
Ce fichier est un template: on peut écrite ce que l'on veut dedans
7) Paramétrer la base de données associée:
Ouvrir config/database.yml
Dans ce fichier, il y a 3 sections intéressantes: la base de données pour le développement du logiciel, celle pour le test et celle pour l'utilisation. Elles peuvent avoir des configurations différentes. Pour l'instant, seule celle pour le développement est à configurer:
development:
database: nomDuProgramme_development #Il faut renommer la ligne
username: root
password: le mot de passe root de MySQL
socket: il faut virer cette ligne (la commenter avec un # devant)
test:
database: nomDuProgramme_test #Il faut renommer la ligne
production:
development #Supprimer tout le bloc et remplacer par cette ligne, pour un cas de test de developpement.
8) TOUJOURS relancer le serveur après avoir modifié database.yml, pour que les changements soient pris en compte:
- Pour le quitter: CTRL+C
- le relancer (cf. 1) )
9) Créer les bases de données
Ouvrir un client MySQL (PhpMyAdmin ou MySQLAdministrator ou CocoaMySQL)
Créer une nouvelle base, p. ex. nomDuProgramme_development
Créer ensuite la première table, p. ex. "posts"
1) id int 11 auto_increment
Ajouter une "PRIMARY_KEY"
2) title varchar 255
10) Créer le modèle (liaison avec la bdd)
Taper:
./script/generate model
./script/generate model nomDuModele (p. ex. "Post")
Constater que le fichier app/models/nomDuModele.rb a été créé
11) Editer nomDuProgramme_controller.rb:
scaffold
ost
"Scaffolding" sert à mettre en ligne un modèle d'objet (celui que l'on vient de créer)
Tester la page.
12) Ajouter une autre colonne dans la table Post de la base de données:
body text
Rafraîchir la page: une zone de texte Body vient d'être créée automatiquement !
13) Ajouter une autre colonne dans la table Post de la base de données:
created_at date
Rafraîchir la page: une zone de date vient d'être créée automatiquement !
Elle est en dessous du corps (Body), ce qui ne va pas. Dans la table de la base de données, il suffit de la remonter (dans CocoaMySQL, drag&drop de la ligne created_at pour la balancer en dessus de la ligne body).
Rafraîchir la page: la zone de date a été remontée au dessus de la zone body !
14) Contrôler que les champs sont bien remplis par l'utilisateur
Ouvrir app/models/post.rb
Tapez l'instruction suivante:
validates_presence_of :title
15) Voir les codes source
Taper dans le shell:
./script/generate scaffold
./script/generate scaffold Post Blog
Au message "overwrite app/controllers/nomDuProgramme_controller.rb? [Ynaq]", taper "a" et entrée pour forcer l'overwriting.
Maintenant, le fichier nomDuProgramme_controller.rb est rempli de toutes les lignes de code... on peut ainsi le localiser en français en modifiant les String !!
Cette action permet également de révéler tous les templates, dans app/views/nomDuProgramme !!
16) Modifier un peu les templates
Ouvrir "list.rhtlm".
Couper:
<%= link_to "Show", :action => 'show', :id => post %>
et le coller en dessous de :
<% for post in @posts %>
Changer "Show" en post.title
Entourer cette instruction de <div><h2>xxx</h2></div>
En dessous, toujours dans le <div> créé, rajouter:
<p><%= post.body %></p>
<p><small><%= post.created_at.to_s(:long) %></small></p>
On peut aussi afficher les posts du plus récent au plus ancien, en remplaçant:
<% for post in @posts %>
par
<% for post in @posts.reverse %>
17) Un peu de gaité dans les ports: Textilize
Remplacer:
<%= post.body %>
par:
<%= textilize(post.body) %>
NB: il faut installer RedCloth (taper "gem install RedCloth" dans un shell, et redémarrer le serveur après toute nouvelle installation de gemme)
Et on peut tester en créant un nouveau post:
*ceci en gras*
_et cela en italique_
*_et pour finir bolditalic_*
18) Un blog doit avoir des commentaires...!
./script/generate model Comment
Un nouveau modèle est créé: app/model/comments.rb
Il faut lui indiquer qu'un commentaire doit être associé à un post déterminé, car il ne peut y avoir de commentaire sans post.
On écrit donc dans comments.rb:
belongs_to
ost
Puis dans post.rb:
has_many :comments
On crée ensuite une nouvelle table dans la bdd, appelée "comments":
id int 11 auto_increment
body text
post_id int 11
Utiliser le client MySQL pour créer un premier commentaire (on n'a pas encore d'interface pour le faire avec le navigateur)
Il faut maintenant afficher ces commentaires dans le blog. On édite "show.rhtml" et on lui rajoute une petite section pour faire cela:
<% for comment in @post.comments %> #attention, c'est <% et non pas <%=
<%= comment.body %>
<hr />
<% end %>
19) Ecrire des commentaires
Rajouter dans show.rhtlm:
<%= form_tag :action => "comment", :id => @post %>
<%= text_area "comment", "body" %><br />
<%= submit_tag "Envoyer" %>
</form>
Il faut créer une action qui se charge de rajouter le commentaire dans la base.
Rajouter dans nomDuProgramme_controller.rb:
def comment
Post.find(params[:id]).comments.create(params[:comment])
flash[:notice] = "Commentaire bien ajouté !"
redirect_to :action => "show", :id => params[:id]
end