From 1b5ea95633912282ea45c766e60853dc957398d0 Mon Sep 17 00:00:00 2001
From: Teddy Wing
Date: Tue, 25 Jul 2017 22:54:40 +0200
Subject: Initial commit. First version of tutorial.
Includes:
* Prerequisite installation procedures
* Project setup
* Ice Cream model and page display
* Authentication
* Creating a model via the interface
* A Rails command reference
Desired additions:
* Editing ice creams (only by users who created them)
* Comments on ice creams
* Ratings of ice creams
* Maybe some info about the asset pipeline
---
"000-Pr\303\251paration.md" | 7 ++
001-Setup.md | 19 ++++++
002-Ice-cream.md | 65 ++++++++++++++++++
003-Authentification.md | 37 ++++++++++
"004-Cr\303\251ation.md" | 106 +++++++++++++++++++++++++++++
006-Commentaires.md | 1 +
"R\303\251f\303\251rence de Commandes.txt" | 36 ++++++++++
7 files changed, 271 insertions(+)
create mode 100644 "000-Pr\303\251paration.md"
create mode 100644 001-Setup.md
create mode 100644 002-Ice-cream.md
create mode 100644 003-Authentification.md
create mode 100644 "004-Cr\303\251ation.md"
create mode 100644 006-Commentaires.md
create mode 100644 "R\303\251f\303\251rence de Commandes.txt"
diff --git "a/000-Pr\303\251paration.md" "b/000-Pr\303\251paration.md"
new file mode 100644
index 0000000..f0f621e
--- /dev/null
+++ "b/000-Pr\303\251paration.md"
@@ -0,0 +1,7 @@
+Préparation
+===========
+
+* Installer Ruby >=2.2.2 (https://github.com/rbenv/rbenv)
+* Installer Bundler (`gem install bundler`)
+* Installer Rails (`gem install rails`)
+* Installer Postgres (`brew install postgresql` ou https://postgresapp.com/)
diff --git a/001-Setup.md b/001-Setup.md
new file mode 100644
index 0000000..7dc10ca
--- /dev/null
+++ b/001-Setup.md
@@ -0,0 +1,19 @@
+Setup
+=====
+
+1. Créez une nouvelle application Rails:
+
+ $ rails new deux_scoops --database postgresql --skip-test
+
+2. Remplacez le contenu de `bin/setup` avec:
+
+ #!/bin/sh
+
+ set -e
+
+ gem install bundler --conservative
+ bundle check || bundle install
+
+ bundle exec rails db:setup
+
+3. Initialisez la base de données avec : `./bin/setup`
diff --git a/002-Ice-cream.md b/002-Ice-cream.md
new file mode 100644
index 0000000..450633b
--- /dev/null
+++ b/002-Ice-cream.md
@@ -0,0 +1,65 @@
+Ice cream
+=========
+
+1. Ajoutez un modèle pour nos glaces :
+
+ rails g model ice_cream flavor:string manufacturer:string
+
+2. Lancez les migrations :
+
+ rails db:migrate
+
+2. Créez une nouvelle glace dans la console Rails :
+
+ $ rails c
+ > IceCream.create(flavor: 'Vanille', manufacturer: 'Picard')
+
+ Sortez de la console avec Control-D
+
+3. Créez un controller pour nos glaces :
+
+ rails g controller ice_creams index --skip-routes
+
+4. Ajouter une route index. Ouvrez `config/routes.rb` et écrivez :
+
+ root 'ice_creams#index'
+
+5. Dans un nouveau terminal, lancez la serveur de développement Rails :
+
+ rails s
+
+ Naviguez à `http://localhost:3000`, et vous devrez voir un placeholder pour
+ la page index des glaces.
+
+6. Ouvrez notre controller (`app/controllers/ice_creams_controller.rb`) et
+ ajoutez cette ligne à la méthode `index` :
+
+ @ice_creams = IceCream.all
+
+ Les variables d'instance, précédés par des `@`, sont accessibles dans les
+ templates.
+
+7. Ouvrez notre template index (`app/views/ice_creams/index.html.erb`).
+ Remplacez le contenu avec :
+
+ <% if @ice_creams.present? %>
+
+ <% @ice_creams.each do |ic| %>
+ -
+ <%= ic.flavor %>, <%= ic.manufacturer %>
+
+ <% end %>
+
+ <% end %>
+
+8. Rechargez la page dans votre navigateur. Vous devrez voir la glace que nous
+ avons crées avant affiché sur la page.
+
+9. Ouvrez le layout (`app/views/layouts/application.html.erb`), et ajoutez cette
+ ligne au-dessus du `<%= yield %>` :
+
+ Deux Scoops
+
+ Quand vous rechargez la page, un header devrait apparaître au-dessus de la
+ liste de glaces. L'HTML dans le template layout est rendu sur tous les pages
+ de l'application.
diff --git a/003-Authentification.md b/003-Authentification.md
new file mode 100644
index 0000000..14bd1cd
--- /dev/null
+++ b/003-Authentification.md
@@ -0,0 +1,37 @@
+Authentification
+================
+
+On va utiliser la gem [Clearance](https://github.com/thoughtbot/clearance) pour
+nous donner de l'authentification.
+
+
+1. Ouvrez le `Gemfile` et ajoutez cette ligne :
+
+ gem 'clearance'
+
+2. Utilizes Bundler pour installer la gem :
+
+ bundle install
+
+3. Pour installer Clearance, faitez :
+
+ rails generate clearance:install
+
+4. Lancez les migrations :
+
+ rails db:migrate
+
+5. Relancez le serveur Rails
+
+4. Ajoutez cet HTML (copié du README de Clearance) dans le `` du
+ `layouts/application.html.erb` :
+
+ <% if signed_in? %>
+ <%= current_user.email %>
+ <%= button_to "Sign out", sign_out_path, method: :delete %>
+ <% else %>
+ <%= link_to "Sign in", sign_in_path %>
+ <% end %>
+
+4. Inscription et connexion sont maintenant possibles depuis l'interface web de
+ l'application.
diff --git "a/004-Cr\303\251ation.md" "b/004-Cr\303\251ation.md"
new file mode 100644
index 0000000..37f92c0
--- /dev/null
+++ "b/004-Cr\303\251ation.md"
@@ -0,0 +1,106 @@
+Création
+========
+
+On va ajouter un formulaire pour créer une nouvelle glace.
+
+
+1. Lancez cette commande :
+
+ rails routes
+
+ La commande affiche toutes les routes/URLs dans notre application, avec les
+ noms que Rails utilise pour ses helpers dans la première colonne, et les
+ mappings des controllers dans la dernière colonne.
+
+2. Ajoutez cette ligne à `config/routes.rb` :
+
+ resources :ice_creams
+
+ Ça va nous créer des routes RESTful pour le controller
+ `IceCreamsController`. Relancez `rails routes` pour voir la différence.
+
+3. Ajoutez une méthode `new` dans notre controller :
+
+ def new
+ @ice_cream = IceCream.new
+ end
+
+4. Créez un template correspondant à cette méthode dans
+ `app/views/ice_creams/new.html.erb`, et remplissez-le avec ce formulaire :
+
+ <%= form_with model: @ice_cream do |f| %>
+
+ <%= f.label :flavor %>
+ <%= f.text_field :flavor, id: :ice_cream_flavor %>
+
+
+
+ <%= f.label :manufacturer %>
+ <%= f.text_field :manufacturer, id: :ice_cream_manufacturer %>
+
+
+
+ <%= f.submit %>
+
+ <% end %>
+
+5. Ajoutez une méthode au controller pour capter les paramètres venant du
+ formulaire :
+
+ private
+
+ def ice_cream_params
+ params.require(:ice_cream).permit(:flavor, :manufacturer)
+ end
+
+ (http://guides.rubyonrails.org/action_controller_overview.html#strong-parameters)
+
+6. Ajoutez une méthode `create` au controller :
+
+ def create
+ @ice_cream = IceCream.new(ice_cream_params)
+
+ if @ice_cream.save
+ redirect_to ice_creams_path
+ else
+ render :new
+ end
+ end
+
+ On essaye de sauvegarder la glace venant du formulaire. Si on réussi, on
+ redirect sur la page index du `IceCreamsController`, sinon on affiche le
+ formulaire.
+
+7. Pour l'instant, nos glaces ne sont pas associés à un utilisateur. On va faire
+ ça maintenant. D'abord, on va assurer que les utilisateurs sont authentiqués
+ avant de changer une glace. Ajoutez cette ligne au début de la classe
+ `IceCreamsController` :
+
+ before_action :require_login, except: [:index, :show]
+
+8. Maintenant, on va créer une association dans la base de données entre nos
+ glaces et nos utilisateurs :
+
+ rails g migration add_user_id_to_ice_creams user:references
+
+9. `rails db:migrate`
+
+10. On va ajouter des associations entre les modèles `User` et `IceCream`.
+ Mettez ces ligned dans les classes des modèles :
+
+ # app/models/ice_cream.rb
+ belongs_to :user
+
+ # app/models/user.rb
+ has_many :ice_creams
+
+11. Dans `IceCreamsController#create`, on va associer la nouvelle glace avec
+ l'utilisateur connecté :
+
+ # Remplacez
+ @ice_cream = IceCream.new(ice_cream_params)
+ # par
+ @ice_cream = current_user.ice_creams.build(ice_cream_params)
+
+ Maintenant, quand on crée des glaces en passant par le formulaire, ces
+ records seront associées avec notre utilisateur.
diff --git a/006-Commentaires.md b/006-Commentaires.md
new file mode 100644
index 0000000..0aba851
--- /dev/null
+++ b/006-Commentaires.md
@@ -0,0 +1 @@
+Comm
diff --git "a/R\303\251f\303\251rence de Commandes.txt" "b/R\303\251f\303\251rence de Commandes.txt"
new file mode 100644
index 0000000..89d5f76
--- /dev/null
+++ "b/R\303\251f\303\251rence de Commandes.txt"
@@ -0,0 +1,36 @@
+Référence de Commandes
+======================
+
+Lancer le serveur Rails :
+
+ rails server # (`rails s`)
+
+Ouvrir un REPL :
+
+ rails console # (`rails c`)
+
+Voir les routes :
+
+ rails routes
+
+
+## Générateurs
+
+`rails g model NOM_DU_MODELE [ARGUMENTS]`
+`rails g controller NOM_DU_CONTROLLEUR [ARGUMENTS]`
+`rails g migration NOM_DE_LA_MIGRATION [ARGUMENTS]`
+
+
+## Migrations
+
+Migrer :
+
+ rails db:migrate
+
+Revert la dernière migration :
+
+ rails db:rollback
+
+Status des migrations :
+
+ rails db:migrate:status
--
cgit v1.2.3