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 à 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 lignes 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és avec notre utilisateur.