Nous devons maintenant indiquer à notre application comment se connecter à la base de données. Pour cela, éditez le fichier database.yml (situé dans le dossier config) pour obtenir quelquechose comme cela.

development:
adapter: postgresql
database: depot_development
username: depot
password: toto

test:
adapter: postgresql
database: depot_test
username: depot
password: toto

production:
adapter: postgresql
database: depot_production
username: depot
password: toto

La syntaxe parle d'elle même, remplacez simplement postgresql par mysql si nécessaire.

Ensuite, créons le premier modèle (et donc la première table de notre base de données), le modèle Snippet. Pour ce faire, deux méthodes :

  • Soit via l'onglet Generator de radrails, choisir modèle dans la liste, puis tapper snippet dans le champ texte
  • Soit, et ce sera ma méthode pour le reste de l'application, dans une console à la racine de l'application :
    ruby script/generate model snippet

Nous venons de créer notre modèle et tous les fichiers associés.

Le premier que nous éditerons est le fichier de migration généré par la création du modèle.
Celui-ci se trouve dans db/migrate et se nomme : 001_create_snippets.rb

Ces fichiers servent à créer notre base de données, en les renseignant avec la syntaxe de Rails, celui ci se chargera d'aptader le code pour le système de gestion de base de données que vous avez choisi (MySQL, Postgres...).

Chaque fichier de migration comporte deux méthodes. La méthode up définie ce que nous souhaitons modifier dans la base de données tandis que la méthode down contient ce que ruby devra faire si l'on souhaite revenir en arrière.

Dans notre cas nous créons donc une table snippets avec les champs titre et texte dans la méthode up, et de quoi détruire cette table dans la méthode down.
Voilà le résultat :

class CreateSnippets < ActiveRecord::Migration
def self.up
create_table :snippets do |t|
t.column :titre, :string
t.column :texte, :text
end
end

def self.down
drop_table :snippets
end
end

Après avoir faire ceci, retournons dans la console et éxécutons :

rake db:migrate

Ruby devrait avoir créer notre table et les champs associés.

Pour commencer, nous allons entrer des données de test dans ces tables en écrivant dans le fichier snippets.yml dans test/fixtures.

Voilà comment j'ai rempli le mien :

ruby:
id: 1
titre: "Save some time"
texte: "Use Ruby on Rails"

two:
id: 2
titre: "Improve your user experience"
texte: "Use Mozilla Firefox"
Note : Les tables ruby contiennent automatiquement un enregistrement ID

Nous allons maintenant créer nos premiers controllers.
J'ai choisi d'en créer deux pour commencer, un controller Admin depuis lequel on pourra ajouter, modifier et supprimer nos Snippets (accessible seulement par les administrateurs) et un controller Snippets qui sera le site accessible par tout le monde.

Allez lancons nous :

ruby script/generate controller snippets

puis

ruby script/generate controller admin

Ces deux scripts ont à leur tour créés quelques fichiers et dossiers notamment les fichiers snippets_controller.rb et admin_controller.rb ainsi que les dossiers app/views/snippets et app/views/admin.

Pour le moment, rendons nous dans le fichier routes.rb situé dans le dossier config.
Ce fichier sert à configurer le lien entre votre application et les url qui lui sont associées.

Nous allons donc appliquer nos propres routes (celles par défaut correspondent à une application non REST).

Pour cela, ajoutons deux lignes au fichier pour obtenir la chose suivante :

ActionController::Routing::Routes.draw do |map|
map.resources :admin, :singular => :admin_instance
map.resources :snippets

map.connect ':controller/:action/:id.:format'
map.connect ':controller/:action/:id'
end

Grâce à ces deux petites lignes l'application est désormais RESTFUL et notre travail sera bien facilité. Je reviendrais dans un prochain billet sur le :singular pour les curieux).

Il ne nous manque plus grand chose pour avoir une application en état de fonctionnement.
Je vous propose pour terminer ce premier tuto d'écrire les controllers et vues de la partie Snippets (accessible à tous) de notre site.

Pour cela éditons le fichier snippets_controller.rb dans app/controllers.

class SnippetsController < ApplicationController
def index
@snippets = Snippet.find(:all,:order => "id desc")
end

def show
@snippet = Snippet.find(params[:id])
end
end

Est-t'il nécessaire d'expliquer le code tellement celui-ci est simple ?
Allez je vous le fais quand même ;)
La ligne : @snippets = Snippet.find(:all,:order => "id desc") permet de stocker dans la variable @snippets un objet contenant les Snippets renvoyés par le modèle Snippet quand on lui demande de chercher (find) tous les snippets (:all) en les ordonnant par leur id avec les plus élevés en premiers (:order => "id desc") .

La ligne @snippet = Snippet.find(params[:id]) demande elle au modèle Snippet de chercher l'enregistrement ayant l'id passé en paramètre.

Avec seulement ces deux petites lignes, nous avons tout ce qu'il nous faut pour afficher nos vues.

Rendez-vous donc dans le dossier views/snippets pour créer les deux vues :
Commençons par la vue dédiée à l'affichage d'un snippet que l'on nommera show.rhtml :

<%= content_tag :h2, @snippet.titre %>
<%
=
content_tag :p, @snippet.texte %>
et poursuivons avec la vue pour les lister nommée index.rhtml :
<% @snippets.eachdo |snippet| %>
<% content_tag :div, :class =
>
"snippet" do -%>
<%= content_tag :h2, (link_to snippet.titre, snippet_path(snippet)) %
>

<%= content_tag :p, snippet.texte %>
<% end -%>
<% end %>

Sachez simplement pour l'instant que le : <% @snippets.each do |snippet| %> permet d'itérer sur l'objet contenant tous les snippets et que la méthode content_tag écrit le tag HTML passé avec le premier paramètre et contenant le deuxième (ex : content_tag :p, "Hello" affichera <p>Hello</p>)

Si vous reproduisez ce tutoriel chez vous, récupérez les fichiers snippets.rhtml (app/views/layout) et snippets.css (public/stylesheets) pour customiser votre interface.

Pour la lancer, éxécutez ruby script/server dans le terminal, celle-ci devrait alors être accessible à l'adresse http://0.0.0.0:3000.
Pour les autres, ma version est disponible ici : http://depot.blogbangbang.com/snippets

Sachez toutefois que la partie <%= yield %> dans le layout ne doit pas etre suprimée puisqu'elle correspond à l'endroit ou s'afficheront les données des vues.

Voilà nous arrivons au terme de ce long tutorial, pas mal de chose à mettre en place pour la première version de cette application mais toute ces choses ne seront plus à refaire et nous permettent désormais d'avoir une miriade de possibilités pour la suite.
Je reviendrais dans le prochain billet sur quelques points précis de ce tutorial et nous crérons ensuite l'interface d'administration.

Archive pour voir l'état actuel de l'ensemble des fichiers.