aboutsummaryrefslogtreecommitdiffstats
path: root/004-Création.md
diff options
context:
space:
mode:
Diffstat (limited to '004-Création.md')
-rw-r--r--004-Création.md106
1 files changed, 106 insertions, 0 deletions
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.