aboutsummaryrefslogtreecommitdiffstats
path: root/004-Création.md
blob: 2e0f634852efc64745474ee6bed29f75e019f791 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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 à 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.