質問編集履歴

4

解決方法を記載

2020/06/08 03:17

投稿

ikutyan46
ikutyan46

score18

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,27 @@
1
+ #解決策
2
+
3
+ record_params.permit内に、関連付けしている子テーブルの[:id]を入れることで解決。
4
+
5
+
6
+
7
+ ```
8
+
9
+ #子テーブル_attributes:[属性]の「属性」に「:id」を付与した。
10
+
11
+ def record_params
12
+
13
+ params.require(:record).permit(:record_id, :training_date, :learning_point, outputs_attributes:[:output_name, :id], practices_attributes:[:practice_item, :practice_time, :id], tasks_attributes:[:task_name, :id]).merge(user_id: current_user.id)
14
+
15
+ end
16
+
17
+ ```
18
+
19
+
20
+
21
+ #元々の質問
22
+
23
+
24
+
1
25
  【実現したいこと】
2
26
 
3
27
  createで登録したデータを、1つずつテーブルに表示させたい

3

追記(paramsの中身の確認)

2020/06/08 03:17

投稿

ikutyan46
ikutyan46

score18

test CHANGED
File without changes
test CHANGED
@@ -271,3 +271,31 @@
271
271
  end
272
272
 
273
273
  ```
274
+
275
+
276
+
277
+ #追記
278
+
279
+ createアクションした時のparamsの中身(適当に値を入れました)
280
+
281
+
282
+
283
+ ```
284
+
285
+ [1] pry(#<RecordsController>)> params
286
+
287
+ => <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"iOBP9oCqOf6KoC5OjUWNg2UCPYiEfq9uMhXN6DHVzy5LtadftUmIzqBhwV8YgufEsW9DwIn2+RWBYaXcQDyChg==", "record"=><ActionController::Parameters {"training_date"=>"2020-06-08", "outputs_attributes"=>{"0"=>{"output_name"=>"ffff"}}, "practices_attributes"=>{"0"=>{"practice_item"=>"3球目攻撃", "practice_time"=>"111"}}, "learning_point"=>"123", "tasks_attributes"=>{"0"=>{"task_name"=>"333"}}} permitted: false>, "commit"=>"この内容で登録する", "controller"=>"records", "action"=>"create"} permitted: false>
288
+
289
+ ```
290
+
291
+ 次に、先ほどのテストで登録したものに対してupdateしたparamsの中身
292
+
293
+
294
+
295
+ ```
296
+
297
+ [1] pry(#<RecordsController>)> params
298
+
299
+ => <ActionController::Parameters {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"3AG1peGKVPxuhUBdHfKGgIoGlxESmAdedft4JpduigL+8hPUw1Il9uUEeTW+vlNZBH74jHRURyMr3zcXCmUJHw==", "record"=><ActionController::Parameters {"training_date"=>"2020-06-08", "outputs_attributes"=>{"0"=>{"output_name"=>"テスト用で直し", "id"=>"77"}}, "practices_attributes"=>{"0"=>{"practice_item"=>"3球目攻撃", "practice_time"=>"300", "id"=>"77"}}, "learning_point"=>"頑張った。", "tasks_attributes"=>{"0"=>{"task_name"=>"問題解決したい", "id"=>"77"}}} permitted: false>, "commit"=>"この内容で更新する", "controller"=>"records", "action"=>"update", "id"=>"52"} permitted: false>
300
+
301
+ ```

2

モデルも追記しました。

2020/06/08 02:47

投稿

ikutyan46
ikutyan46

score18

test CHANGED
File without changes
test CHANGED
@@ -180,6 +180,14 @@
180
180
 
181
181
 
182
182
 
183
+ def edit
184
+
185
+ @record = Record.find_by(id: params[:id])
186
+
187
+ end
188
+
189
+
190
+
183
191
  def update
184
192
 
185
193
  @record = Record.find_by(id: params[:id])
@@ -203,3 +211,63 @@
203
211
 
204
212
 
205
213
  ```
214
+
215
+
216
+
217
+ ```model
218
+
219
+ #recordモデル
220
+
221
+ class Record < ApplicationRecord
222
+
223
+ validates :learning_point, presence: true
224
+
225
+ validates :training_date, presence: true
226
+
227
+ belongs_to :user
228
+
229
+ has_many :outputs, dependent: :destroy
230
+
231
+ has_many :practices, dependent: :destroy
232
+
233
+ has_many :tasks, dependent: :destroy
234
+
235
+ # recordとpracticeは、親・子関係
236
+
237
+ # has_many :practices
238
+
239
+ accepts_nested_attributes_for :outputs
240
+
241
+ accepts_nested_attributes_for :practices
242
+
243
+ #belong to :users, through :practices
244
+
245
+ # has_many :tasks
246
+
247
+ accepts_nested_attributes_for :tasks
248
+
249
+ #belongs to :users, through :tasks
250
+
251
+ end
252
+
253
+ ```
254
+
255
+
256
+
257
+ ```model
258
+
259
+ #practiceモデル
260
+
261
+ class Practice < ApplicationRecord
262
+
263
+ validates :practice_item, presence: true
264
+
265
+ validates :practice_time, presence: true
266
+
267
+ belongs_to :record
268
+
269
+ # has_many :users, through: :records
270
+
271
+ end
272
+
273
+ ```

1

updateアクションを追記しました。

2020/06/08 02:18

投稿

ikutyan46
ikutyan46

score18

test CHANGED
File without changes
test CHANGED
@@ -176,4 +176,30 @@
176
176
 
177
177
  @records = current_user.records.includes(:practices)
178
178
 
179
+ maisumakunさん、ありがとうございます。
180
+
181
+
182
+
183
+ def update
184
+
185
+ @record = Record.find_by(id: params[:id])
186
+
187
+ if @record.update(record_params)
188
+
189
+ flash[:success] = "練習内容の更新が完了しました。"
190
+
191
+ redirect_to records_url
192
+
193
+ else
194
+
195
+ flash[:alert] = "更新に失敗しました。"
196
+
197
+ render :edit
198
+
199
+ end
200
+
201
+ end
202
+
203
+
204
+
179
- ```
205
+ ```