un tuto pour Ruby on Rails

p4bl0

Membre expert
Club iGen
12 Juillet 2004
4 772
423
35
$PWD
p4bl0.net
Bonjour :coucou:

J'ai vu les screencast de RubyOnRails... ben je suis impressionné.

Je connais un peu Ruby, savez vous ou on peut trouver un bon tuto pour Ruby on Rails, mes recherche sur Google n'ont pas été satisfaisante...


Le tuto serais de préférences en français, mais je lis aussi l'anglais, mais rien d'autre.





merci d'avance :)
 
salut. je n'ai pas de tutoriels à te proposer, mais une question sur ruby on rails, il s'agit bien je crois d'un nouveau language web ou je me trompes?
 
claudde a dit:
salut. je n'ai pas de tutoriels à te proposer, mais une question sur ruby on rails, il s'agit bien je crois d'un nouveau language web ou je me trompes?
C'est ça, je ne sais pas si c'est nouveau, mais en tout cas c'est un très sérieux concurrent à PHP.

Il a l'air très puissant, regarde les vidéos sur la page des screencast (voir mon premier post) c'est impressionnant !


===

Si il y a des utilisateurs de Ruby On Rails sur MacG, ils pourraient venir ici nous dire ce qui les a poussé à utiliser ce langage, nous donner leurs impressions de quand ils ont commencé, et avec quoi ils ont commencer (pour apprendre)
 
Ce n'est pas un tuto du tout, mais ça peut t'aider. Il s'agit de la retranscription sommaire de ce que fait le commentateur de la vidéo de démonstration "création d'un blog en 15 minutes" (ici)

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 :post

"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 :post

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
 
  • J’aime
Réactions: p4bl0
Merci beaucoup, ça va me permettre de comprendre les quelques trucs que je n'avais pas saisi.

Piaf : au tout début, c'est "rails nomDuProgramme" qu'il faut taper dans la vidéo non ?

Il n'y a apparemment pas de réel tuto comme pour le PHP par exemple sur le siteduzéro...
je me débrouillerai avec ça.


re-merci :up:

P.S. : ton avatar est sympa ! :rateau:
 
- Ruby On Rails utilise le langage Ruby, c'est donc des tutos sur Ruby qu'il faut chercher. Après il y a des Rails pour d'autres langages (mais moins évolués certes)

- Pour MySQL il te faut d'abord définir un compte et un mdp:
mysqladmin -u root p MotDePasse
puis lancer le serveur
sudo mysqld_safe &

- Ci-dessus, 1ere étape: oui c'est bien "rails" et non pas "ruby" qu'il faut taper... faute d'inattention
 
OK.

après avoir lancer le serveur, je peut y accéder comment en dehors de la ligne de commande, je veut dire via PHPMyAdmin par exemple ?? :heu:


ça serait bien si c'était aussi simple de faire du Ruby On Rails que du PHP... vive MAMP


#PIAF : eh j'y avais pas pensais, si j'utilisais le serveur mysql de MAMP
 
J'ai un autre problème, je suis À LA LETTRE le tuto pour le blog en 15 minutes, mais au moment ou il devrait m'afficher la page ou on peu cliquer sur "new post" (juste après avoir mit "scaffold : post" dans le fichier nomDuProd_controller.rb) il m'affiche ça :
Bloc de code:
SocketError in BlogController#index

getaddrinfo: No address associated with nodename
RAILS_ROOT: /Users/t2o/Sites/RoR/Blog/public/../config/..

Application Trace | Framework Trace | Full Trace
Request

Parameters: None

Show session dump

Response

Headers: {"cookie"=>[], "Cache-Control"=>"no-cache"}


à l'aide !!! :(



merci d'avance :zen:
 
truk2oof a dit:
OK.

après avoir lancer le serveur, je peut y accéder comment en dehors de la ligne de commande, je veut dire via PHPMyAdmin par exemple ?? :heu:


ça serait bien si c'était aussi simple de faire du Ruby On Rails que du PHP... vive MAMP


#PIAF : eh j'y avais pas pensais, si j'utilisais le serveur mysql de MAMP

mais c'est aussi simple!!!! il suffit juste de prendre le train en marche... :D
ou la Locomotive
 
truk2oof a dit:
C'est ça, je ne sais pas si c'est nouveau, mais en tout cas c'est un très sérieux concurrent à PHP.

Il a l'air très puissant, regarde les vidéos sur la page des screencast (voir mon premier post) c'est impressionnant !


===

Si il y a des utilisateurs de Ruby On Rails sur MacG, ils pourraient venir ici nous dire ce qui les a poussé à utiliser ce langage, nous donner leurs impressions de quand ils ont commencé, et avec quoi ils ont commencer (pour apprendre)
Attention à la méprise. Ruby On Rails n'est pas un langage de programmation. C'est un framework, un cadre de développement, qui utilise le langage Ruby. C'est Ruby qu'on peut comparer avec PHP, pas Ruby On Rails.

Ruby On Rails, c'est un ensemble de classe, de normes de développements et d'autres choses qui forment un cadre de développement, un environnement à partir duquel on va pouvoir développer des applications métiers.

Le but d'un cadre de développement est de fournir des solutions déjà prêtes pour toutes les tâches typiquement récurentes dans les projets de développement (accès aux base de données, contrôle des formulaires, envoi des réponses au client, etc.). De ce fait, le développeur n'a à se soucier que de l'essentiel : la valeur ajoutée de son application.

Il existe des frameworks pour différents langages. Il y a Ruby On Rails pour Ruby, il en existe aussi une pléthore pour PHP (dont les français Copix, Jelix et Castor), ainsi que pour Python, etc.
 
sylver a dit:
Attention à la méprise. Ruby On Rails n'est pas un langage de programmation. C'est un framework, un cadre de développement, qui utilise le langage Ruby. C'est Ruby qu'on peut comparer avec PHP, pas Ruby On Rails.

Ruby On Rails, c'est un ensemble de classe, de normes de développements et d'autres choses qui forment un cadre de développement, un environnement à partir duquel on va pouvoir développer des applications métiers.

Le but d'un cadre de développement est de fournir des solutions déjà prêtes pour toutes les tâches typiquement récurentes dans les projets de développement (accès aux base de données, contrôle des formulaires, envoi des réponses au client, etc.). De ce fait, le développeur n'a à se soucier que de l'essentiel : la valeur ajoutée de son application.

Il existe des frameworks pour différents langages. Il y a Ruby On Rails pour Ruby, il en existe aussi une pléthore pour PHP (dont les français Copix, Jelix et Castor), ainsi que pour Python, etc.
J'avais bien compris que Ruby On Rails n'est pas un langage, et d'ailleurs je ne l'ai pas dit, j'ai dit : "c'est un très sérieux concurrent à PHP" c'est à dire que L'utilisation de Ruby On Rails peut faire de la concurrence à l'utilisation de PHP.


Sinon, je ne savais pas qu'il existais les même chose pour Python et PHP c'est super ça, je vais me documenter ! Cela existe--t-il pour Perl ?
Piaf : oui ça exsite pour perl.
 
truk2oof a dit:
j'ai dit : "c'est un très sérieux concurrent à PHP" c'est à dire que L'utilisation de Ruby On Rails peut faire de la concurrence à l'utilisation de PHP.
Ben elle est là la méprise. Ruby on Rails ne peut pas faire de la concurrence à PHP, puisque ce sont deux choses différentes. PHP est un langage, Ruby on Rails un framework construit à partir d'un langage (en l'occurence Ruby).

Enfin tu as certainement compris, c'est juste une histoire de vocabulaire et de tournure.