質問編集履歴

5

最終更新日を追加。自己解決法とベストアンサーを決め、本質問はひとまず閉鎖。

2021/08/26 06:13

投稿

kaoru-drosera
kaoru-drosera

スコア23

test CHANGED
@@ -1 +1 @@
1
- 【rails】一対多対一のリレーションを使うフォームで、バリデーションに失敗する(仮)(更新:210814)
1
+ 【rails】一対多対一のリレーションを使うフォームで、バリデーションに失敗する(仮)(最終更新:210826)
test CHANGED
File without changes

4

確認してみると少し見づらかったので修正しました。

2021/08/26 06:13

投稿

kaoru-drosera
kaoru-drosera

スコア23

test CHANGED
@@ -1 +1 @@
1
- 【rails】一対多対一のリレーションを使うフォームで、バリデーションに失敗する(仮)
1
+ 【rails】一対多対一のリレーションを使うフォームで、バリデーションに失敗する(仮)(更新:210814)
test CHANGED
@@ -514,7 +514,7 @@
514
514
 
515
515
 
516
516
 
517
- ##### deep_merge
517
+ ### deep_merge
518
518
 
519
519
  コードは以下の通りに修正しました。
520
520
 
@@ -548,7 +548,7 @@
548
548
 
549
549
 
550
550
 
551
- ##### to_h.deep_merge
551
+ ### to_h.deep_merge
552
552
 
553
553
 
554
554
 
@@ -584,7 +584,7 @@
584
584
 
585
585
 
586
586
 
587
- ##### reverse_merge
587
+ ### reverse_merge
588
588
 
589
589
  最後はreverse_mergeですが、結果は変わりませんでした。
590
590
 

3

「試したこと」を追加。

2021/08/14 12:41

投稿

kaoru-drosera
kaoru-drosera

スコア23

test CHANGED
File without changes
test CHANGED
@@ -498,9 +498,95 @@
498
498
 
499
499
 
500
500
 
501
-
502
-
503
-
501
+ # 試したこと(更新:210814)
502
+
503
+ sefileにuser_idがない、とのご指摘をいただいたので解法を調べていたところ、
504
+
505
+ 1. deep_merge
506
+
507
+ 2. to_h.deep_merge(配列に変換した後deep_merge)
508
+
509
+ 3. reverse_merge
510
+
511
+
512
+
513
+ の3つがありました。
514
+
515
+
516
+
517
+ ##### deep_merge
518
+
519
+ コードは以下の通りに修正しました。
520
+
521
+
522
+
523
+ /app/controllers/sampler_controller.rb
524
+
525
+ ```ruby
526
+
527
+ def sampler_params
528
+
529
+ params.require(:sampler).permit(:sampler_name, seboards_attributes: [:position, :btncolor, :volume, :loopable, sefile_attributes: [:sename, :sedata]]).deep_merge(seboards_attributes:[sefile_attributes:[user_id: current_user.id]])
530
+
531
+ end
532
+
533
+
534
+
535
+ def update_sampler_params
536
+
537
+ params.require(:sampler).permit(:sampler_name, seboards_attributes: [:position, :btncolor, :volume, :loopable, sefile_attributes: [:sename, :sedata]]).deep_merge(seboards_attributes:[sefile_attribute:[user_id: current_user.id]])
538
+
539
+ end
540
+
541
+
542
+
543
+ ```
544
+
545
+ その結果以下のようなエラーが出ました。
546
+
547
+ ![undifined_merge](cbc81a8a82b97163c5f293bb94981708.png)
548
+
549
+
550
+
551
+ ##### to_h.deep_merge
552
+
553
+
554
+
555
+ コードは以下の通りに修正しました。
556
+
557
+
558
+
559
+ /app/controllers/sampler_controller.rb
560
+
561
+ ```ruby
562
+
563
+ def sampler_params
564
+
565
+ params.require(:sampler).permit(:sampler_name, seboards_attributes: [:position, :btncolor, :volume, :loopable, sefile_attributes: [:sename, :sedata]]).to_h.deep_merge(seboards_attributes:[sefile_attributes:[user_id: current_user.id]])
566
+
567
+ end
568
+
569
+
570
+
571
+ def update_sampler_params
572
+
573
+ params.require(:sampler).permit(:sampler_name, seboards_attributes: [:position, :btncolor, :volume, :loopable, sefile_attributes: [:sename, :sedata]]).to_h.deep_merge(seboards_attributes:[sefile_attribute:[user_id: current_user.id]])
574
+
575
+ end
576
+
577
+
578
+
579
+ ```
580
+
581
+ その結果以下のようなエラーが出ました。
582
+
583
+ ![イメージ説明](0652820ffd0186fbe07b24c52b22dd30.png)
584
+
585
+
586
+
587
+ ##### reverse_merge
588
+
589
+ 最後はreverse_mergeですが、結果は変わりませんでした。
504
590
 
505
591
 
506
592
 

2

モデルに問題がある、というご指摘をいただいたため問題のあるseboardモデルと、その下層のsefileモデルのコードを追加いたしました。

2021/08/14 12:39

投稿

kaoru-drosera
kaoru-drosera

スコア23

test CHANGED
File without changes
test CHANGED
@@ -332,6 +332,58 @@
332
332
 
333
333
 
334
334
 
335
+ ##### /app/models/seboard.rb
336
+
337
+ ```Ruby
338
+
339
+ class Seboard < ApplicationRecord
340
+
341
+ belongs_to :sampler,inverse_of: :seboards#, class_name: "Sampler", foreign_key: 'sampler_id'
342
+
343
+
344
+
345
+ has_one :sefile,inverse_of: :seboard#, class_name: "Sefile", foreign_key: 'sefile_id'
346
+
347
+ accepts_nested_attributes_for :sefile
348
+
349
+
350
+
351
+
352
+
353
+ end
354
+
355
+ ```
356
+
357
+
358
+
359
+ ##### /app/models/sefile.rb
360
+
361
+ ```Ruby
362
+
363
+ class Sefile < ApplicationRecord
364
+
365
+ belongs_to :user, class_name: "User", foreign_key: 'user_id'
366
+
367
+
368
+
369
+ belongs_to :seboard, class_name: "Seboard", foreign_key: 'seboard_id' ,inverse_of: :sefile, optional: true
370
+
371
+
372
+
373
+ mount_uploader :sedata, SeUploader
374
+
375
+
376
+
377
+ end
378
+
379
+
380
+
381
+ ```
382
+
383
+
384
+
385
+
386
+
335
387
  ##### /app/views/sampler/_save.html.erb
336
388
 
337
389
  ```html

1

「おことわり」を更新

2021/08/12 12:58

投稿

kaoru-drosera
kaoru-drosera

スコア23

test CHANGED
File without changes
test CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  「[unknown attribute 'XXX' for XXX. で必要ないはず/存在するはずのカラムが要求される](https://teratail.com/questions/353417)」の続きになります。
4
4
 
5
+ そのため、「詰まっている箇所」まで同じ文面が続きます。
6
+
5
7
 
6
8
 
7
9
  # 前提