diff options
-rw-r--r-- | 000-Préparation.md | 7 | ||||
-rw-r--r-- | 001-Setup.md | 19 | ||||
-rw-r--r-- | 002-Ice-cream.md | 65 | ||||
-rw-r--r-- | 003-Authentification.md | 37 | ||||
-rw-r--r-- | 004-Création.md | 106 | ||||
-rw-r--r-- | 006-Commentaires.md | 1 | ||||
-rw-r--r-- | Référence de Commandes.txt | 36 |
7 files changed, 271 insertions, 0 deletions
diff --git a/000-Préparation.md b/000-Préparation.md new file mode 100644 index 0000000..f0f621e --- /dev/null +++ b/000-Préparation.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? %> + <ul> + <% @ice_creams.each do |ic| %> + <li> + <%= ic.flavor %>, <%= ic.manufacturer %> + </li> + <% end %> + </ul> + <% 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 %>` : + + <h1>Deux Scoops</h1> + + 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 `<body>` 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éation.md b/004-Création.md new file mode 100644 index 0000000..37f92c0 --- /dev/null +++ b/004-Création.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| %> + <div> + <%= f.label :flavor %> + <%= f.text_field :flavor, id: :ice_cream_flavor %> + </div> + + <div> + <%= f.label :manufacturer %> + <%= f.text_field :manufacturer, id: :ice_cream_manufacturer %> + </div> + + <div> + <%= f.submit %> + </div> + <% 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éférence de Commandes.txt b/Référence de Commandes.txt new file mode 100644 index 0000000..89d5f76 --- /dev/null +++ b/Référence 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 |