Tutorial Rubyonrails 3 - Partie 2 - Création des models (rails generate model)

Partie 2 – Rails3 -  Création des models (rails generate model)

N’hésitez à mettre des commentaires / à corriger mes fautes / à rajouter des choses !

Allons-y notre blog a besoin de quelques models :

reader : celui qui laissera un comments sur un post.
post : un article du blog, il possède plusieurs comments.
comment : les commentaires des readers sur un post.

J 'ai volontairement mis en gras des termes pour qu'apparaissent les relations entre les models (ce que nous verrons la prochaine fois).

Comme nous l’avons vu plus haut nous allons utiliser : Rails generate model

La syntaxe est :

Rails generate model monmodel champ:type champ:type...

Voici les types disponibles:
  • string      (chaine 255 caractères)
  • text      (texte sans limite de caractère)
  • datetime    (champs date heure)
  • date      (champs date)
  • integer      (entier)
  • numeric     (champs pour des nombres avec précision)
  • float      (nombre décimal, à virgule...)
  • boolean     (booléen : true / false)

Pour notre blog:

rails generate model reader pseudo:string www:string
rails generate model post title:string content:text visible:boolean
rails generate model comment content:text visible:boolean

Nous avons nos models, mais que faire avec des models ?
Ils servent à faire le lien avec la base de données, à gérer les relations entre les models. On ne manipule quasiment plus de sql.

Executez les migrations, nous verrons plus tard de quoi il s’agit mais faites-le !
rake db:migrate

Vous pouvez tester les lignes de code qui suivent en lancant la console (pour quitter la console rails : tapez exit) :

rails console ou rails c

Pour créer un article :

post = Post.new(:title => “Mon titre”, :content => “contenu de mon article”, :visible => false)
post.save

Pour chercher un article par son ID :

post = Post.find(1)
ou
post = Post.where(:id => 1).first

Pour chercher un article par son title :

post = Post.where(:title => “Mon titre”).first

Pour le supprimer :

post.destroy

Rails (ActiveRecord pour être précis) se charge de construire les requêtes sql pour nous.
Attention si vous voyez find_all_by... ou find(:all) c’est vieux c’est rails 2 :-p

Maintenant que vous avez créé vos models vous pouvez aller les voir dans monblog/app/models .

Vous pouvez ajouter des méthodes d’instances (qui s’applique sur l’objet instancié) et des méthodes de classes dans vos models.

Exemple pour notre blog :

class Post < ActiveRecord::Base
 # Méthode d’instance qui renvoie le nombre de commentaire
 def nb_comment
   return self.comments.length
 end

 # Méthode de classe (précédé de self. ) qui affiche “Méthode de classe”
 def self.nb_post
   return Post.all.length
 end
end

Vous pouvez appeler votre méthode d’instance de cette manière (sur un objet instancié)

post = Post.find(1)
post.nb_comment

Et votre méthode de classe comme ceci (directement sur la classe) :

Post.nb_post

Attention ces 2 méthodes devraient être des scopes, c’est plus adapté mais c’était pour l’exemple.

Prochainement Partie 3 – Création des relations entre les models (détail relation et migration)