TP Mini-blog avec Rails

Ici, j'écris toutes les étapes que j'ai réalisé pour faire ce mini blog histoire de voir si j'ai bien compris.

Votre mission sera de réaliser une nouvelle application Rails, qui devra comporter les éléments suivants.

  1. Ce sera un blog qui aura des articles.
  2. Chaque article a un titre et un contenu.
  3. Faites une page d’accueil qui liste les liens des articles.
  4. Ne faites pas de formulaire mais ajoutez trois articles via la console rails.

Typographie:

Terminal, console rails, code ruby, HTML, URL, lien dossier ou fichier


 

I. Initialisation du projet Rails.

  1. rails new miniBlog (création projet Rails)
  2. cd miniBlog (on se place dans le dossier)
  3. rails s (pour voir si le serveur fonctionne bien)
  4. rails generate controller articles index (création contrôleur et vue articles)
  5. Je vais sur localhost:3000/articles/index. La vue a été bien générée. Je veux changer d'URL et avoir ça à l'acceuil du site:
  6. dans config/routes.rb j'ajoute root 'articles#index' j'ai également ajouté get 'articles' => 'articles#index' pour que /articles fonctionne aussi

II. Création et intégration de la BDD à Rails

( Voilà ce que je veux obtenir):


id title contenu
1 "Blabla" "qsdqsdsdqsdqsdq."
2 "Bloubou" "..qsdqsd."
3 "Zigougou" "..sdqsd."
  1. Hop une migration: rails generate migration TableArticles
  2. Dans db/migrate, je trouve un fichier ruby avec une classe TableArticle. Je vais utiliser des fonctions de rails pour créer et ajouter des colonnes à ma table à l'interieur de la méthode change:
    create_table :articles
    add_column :articles, :title, :string
  3. J'ai une colonne pour le titre, mais pas encore pour le contenu, tjrs dans change, je fais un deuxième add_column:
    add_column :articles, :content, :text
  4. Attention les yeux, c'est le temps de "rake" pour que tout cela soit pris en compte: rake db:migrate
  5. je fais un rails c histoire de voir si je n'ai rien oublié, c'est bon, pas d'erreurs
  6. Je lie la BDD contenant ma table articles avec un model qui représentera la table fraichement créée: Je crée dans le dossier app/models, un fichier ruby, article.rb. (Les différents articles du blog seront des objets de la classe Article, d'ou le nom "modèle". Article est le modèle)
  7. On y créera une classe qui représentera la BDD hérité d'une classe pré-codée servant a établir la relation entre la création d'une entrée et la BDD.
    class Article < ActiveRecord::Base

    end
  8. Un petit rails c, pour voir si tout va bien. C'est bien le cas.

III. Ajout du contenu via la console Rails

  1. allez hop on ajoute un article via la console rails: Article.create title: "Mirabelles à gogo", content: "Blablablablablablabla"
  2. Petite vérification, voir si la BDD à bien de nouvelles données : Article.all Tout est bon.
  3. Allez on réitère le truc histoire d'avoir 3 posts: Article.create title: "Mirabelles à gogo", content: "Deuxième article" et hop
  4. Article.create title: "Troisse", content: "Troisième article blablablabla"
  5. Je change juste le titre du deuxième article: deusse = Article.find(2)
    deusse.title = "Deusse"
    deusse.save

IV. Création de la vue (affichage des articles)

On doit afficher la liste sur la vue, mais les resultat seront générés entre autres par le controleur:

  1. Dans app/controller/articles_controller.rb, on va écrire dans la fonction index ceci:
    @listeArticles = Article.all (notre variable globale listeArticles contient en tableau l'ensemble des données)
  2. Dans la vue, on va exploiter ces données: <ol>
    <% @listeArticles.each do |unArticle| %>
    <li><%= unArticle.title %></li>
    <% end %>
    </ol>
  3. En se rendant sur le site, les articles s'affichent bel et bien.Il manque les liens. L'URL spécifiée de ces derniers pourront avoir cette forme, avec l'id en argument: <li><a href="/articles/<%= unArticle.id %>"><%= unArticle.title %></a></li>
  4. Dans le controlleur, on va ajouter une fonction show:
    def show
    @oneArticle = Article.find(params[:id])
    end
    Cette fonction choisit un seul article parmis d'autres dans la basede donnée (.find). On récupère la saisie utilisateur (via barre url ou lien) avec params. Qui dit URL dit routes! Car pour l'instant ça ne marchera pas.
  5. Dans routes.rb, pour tout lien qui ressemblent à ça : "localhost:3000/articles/2" passer par un controlleur qui envoie les bonnes données et la bonne vue. On va l'écrire comme ça: get '/articles/:id' => 'articles#show'
  6. Maintenant, on va créer la vue correspondante, on va faire un fichier show.html.erb.
  7. On affiche le contenu de la varible contenant uneseule entrée de la BDD:
    <%= @oneArticle.title%>
    <%= @oneArticle.content%>
  8. Et ça marche!