diff options
Diffstat (limited to '004-Création.md')
-rw-r--r-- | 004-Création.md | 106 |
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. |