playlist Démarrage d'une application de vente en ligne

Publié il y a 8 mois dans la série : Rails
Nicolas Cavigneaux
Votre formateur
Nicolas Cavigneaux

A la recherche d'un langage polyvalent, j'ai fait la découverte de Ruby en 2003. J'ai donc très vite commencé à utiliser Ruby au quotidien pour des tâches diverses et variées (scripting, applications lourdes…).

Courant 2004, une vague de fraicheur est apparue avec l'arrivée de Ruby on Rails qui m'a de suite conquis. J'ai donc décidé de participer activement à la communauté (forums, patches, librairies, …). En 2010, je fais la rencontre de Martin Catty et retrouve dans sa vision la rigueur et les bonnes pratiques que j'aime mettre en place, le déclic a donc été immédiat.

Synbioz met en place des solutions robustes sur la base d'outils modernes et funs, je veux faire partie de l'aventure.

Catégories : Développement

Démarrage d'une application qui servira de base dans les vidéos à venir pour découvrir la majeure partie des fonctionnalités et spécificités de
Rails.

Dans cette vidéo on commence donc la mise en place d'un site de vente en ligne en créant son squelette puis en mettant en place une interface de gestion des produits.

Afficher le transcript complet de la vidéo
Commençons une app de vente en ligne

Bienvenue dans cette vidéo consacrée à Ruby on Rails. Nous allons y initier une application de vente en ligne ce qui nous permettra
d'aborder la majeure partie des fonctionnalités et spécificités de Rails.

Nous avions déjà commencé la série sur Rails mais du temps a coulé sous les ponts. Nous allons donc commencer par installer la dernière version en date de Ruby et de Rails.

Pour Rails nous allons tricher et prendre une release candidate puisque la version finale devrait bientôt sortir. Ça nous permettra de profiter des dernières fonctionnalités mises à disposition.

Installation de Ruby et Rails

Passons au vif du sujet et installons Ruby et Rails. Pour mémoire j'utilise Mac OS X et Homebrew pour installer les outils. Les commandes peuvent donc être différentes pour vous si vous utilisez un autre système.

On commence par installer Ruby :

$ brew install rbenv
$ rbenv install 2.5.0

L'installation devrait être plus longue chez vous pour deux raisons. J'ai déjà rbenv et Ruby 2.5.

On passe maintenant à l'installation de Rails :

$ gem install rails --pre
$ rails -v

Nous avons maintenant le nécessaire, passons à la création du squelette de l'application. Rien de bien différent par rapport à ce qu'on a pu voir dans la vidéo précédente. On notera toutefois que l'arborescence qui va être générée a légèrement changé du fait des nouvelles fonctionnalités apportées par les versions récentes de Rails.

Création du squelette

Pour cette application qui servira de support aux vidéos, on utilisera SQLite comme base de données pour se simplifier la vie. Vous pouvez évidemment choisir d'utiliser une autre base de donnée comme MySQL ou Postgresql. Ça ne devrait à priori rien changer pour le suivi de cette
série.

Rails et notamment ActiveRecord tente d'abstraire au maximum le dialogue avec la base de donnée, votre code sera donc identique.

Soyons originaux et nommons notre app "shop" :

$ rails new shop
$ cd shop

Notre structure de base est crée, on peut d'ores et déjà lancer notre app, elle est fonctionnelle ! Elle ne fait pas grand chose mais vu le peu de travail qu'on a fourni, c'est déjà pas mal.

$ bin/rails server
$ open http://localhost:3000
Vous verrez que lors de l'utilisation de l'application, des messages vont s'afficher dans le terminal. Ce sont les logs applicatifs et ils pourront nous être très utiles pour comprendre ce qu'il se passe et pour débugguer.

Utiliser le générateur de scaffold

On peut commencer à travailler sur notre app de vente en ligne. Avant de vendre des produits en ligne, il faut pouvoir les renseigner. On va donc ajouter les fonctionnalités nécessaires pour gérer les produits disponibles à la vente.

Pour ce genre de besoin simple et pour accélérer la mise en place d'opération CRUD, Rails met à notre disposition un générateur de scaffold.

Nous allons avoir besoin d'un modèle Product qui aura un nom, une description, un prix et un lien vers une image. Le générateur va
pouvoir nous générer tout le nécessaire pour que nous puissions gérer nos produit sans même avoir à écrire une ligne de code.

$ bin/rails generate scaffold Product title:string description:text price:decimal image_url:string

Comme vous pouvez le voir, de nombreux fichiers ont été créés pour nous. Le premier dans la liste est ce qu'on appelle une migration. Pour faire simple c'est un fichier qui contient des modifications à apporter à la base de données.

Quand vous voulez changer le schéma de la base de données en Rails, vous ne le faites pas à la main ou avec un bête script SQL mais plutôt
en passant par le système de migration qui met à votre disposition les outils nécessaires à la facilitation de la gestion du schéma de base de données.

Cette façon de faire a plusieurs avantages. La gestion du schéma est indépendante de la base de donnée utilisée, il est possible de jouer les fichiers de migration pour mettre à jour la base de données sans se soucier de ce qui a déjà été appliqué ou non mais il est aussi
possible de revenir en arrière dans les migrations et donc dans le schéma.

Si on regarde le contenu de ce fichier de plus près, on voit qu'un DSL est utilisé pour décrire les changements à appliquer. Nous allons modifier la précision appliquée à la colonne `price`.

t.decimal :price, precision: 6, scale: 2

On note aussi l'appel à timestamps qui ne correspond à aucune des colonnes que nous avions précisé. Cet appel est ajouté automatiquement par le générateur et permet de créer deux colonnse qui serviront à traquer automatiquement la date de création et de dernière mise-à-jour de chaque entrée.

Il faut maintenant jouer cette migration pour qu'elle soit appliquée, on lance donc la commande adéquate :

$ bin/rails db:migrate

La génération du scaffold et l'application des migrations suffit à avoir une gestion fonctionnelle des produits, allons voir ça:

open http://localhost:3000/products

Notre liste est vide mais un lien nous propose d'ajouter un nouveau produit, ce que nous allons faire.

Modification de la vue

On va maintenant apporter notre première modification qui va consister à agrandir le textarea pour rendre l'écriture du descriptif produit plus agréable.

Le formulaire qui est utilisé à la fois pour la création et la mise-à-jour est partagé dans un fichier qu'on appelle partial pour faciliter sa ré-utilisation. La convention veut que les fichiers partial aient un nom qui commence avec un underscore.

Ne nous soucions pas tout de suite du détail de ce fichier et modifions simplement la taille du champs texte en précisant une taille de 60 colonnes et de 10 lignes.

<%= f.text_area :description, cols: 60, rows: 10 %>

Si on sauvegarde le fichier et qu'on retourne sur la page de création d'un produit on peut constater l'effet qu'a eu notre modification.

Utilisation des seeds

On pourrait vouloir pré-remplir notre liste de produits avec un certain nombre d'éléments parce qu'on sait qu'ils doivent toujours être présents.

Pour s'épargner d'avoir à le faire à la main quand vous installez l'application quelque part, on peut se servir des seeds. Le fichier de seeds est un simple fichier Ruby dans lequel on peut faire appel aux modèles de l'application. Ça nous permet donc de manipuler les données qui doivent être présentes en base.

Ce fichier est accompagné d'une commande qui permet de lire et jouer ces seeds. On peut donc automatiser le remplissage de la base. Voyons
ça :

Product.create(
  title: "Mug",
  description: "Un joli mug pour votre café",
  price: 12.5,
  image_url: "une_image.jpg")
  
Product.create(
  title: "T-shirt",
  description: "Parfait pour le sport",
  price: 25,
  image_url: "tshirt.jpg")

On sauvegarde ce fichier et on joue la tâche dédiée :

$ bin/rails db:seed

On peut maintenant retourner voir notre liste de produit et constater que les produits créés dans les seeds sont bien là.

Dans cet épisode nous avons déjà bien avancé en mettant en place un système fonctionnel de gestion des produits. Ce n'est pas très beau et il n'y a pas de fonctionnalité très avancée mais c'est un bon début.

Dans le prochain épisode nous verrons comment améliorer la présentation de cette page de listing pour la rendre plus agréable à l'utilisation.
1/9 dans la sérieRails