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? %> + + <% 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