回答編集履歴

1

自己解決したため

2020/09/04 12:31

投稿

退会済みユーザー
test CHANGED
@@ -1,42 +1,36 @@
1
- 根本的な解決には至っておりませんが、以下検証内容より根本原因と対策の方向性が見えてきたため、当該質問は一旦closeさせていただきます。
1
+ 以下検証より解決できたため、当該質問closeさせていただきます。
2
-
3
- (新たに出現したエラーについては、当該質問の主旨から外れるようなので改めて質問を立ち上げさせていただきます。)
4
2
 
5
3
  今回コメント及び回答をいただいた皆さま、ご助言いただき有難うございました。
6
4
 
7
5
 
8
6
 
9
- - 検証内容・結果
7
+ - 仮説
10
8
 
11
9
  以下、UserモデルのValidationを削除(コメントアウト)することでプロジェクトテーブル及び中間テーブルのデータが保存された。
12
10
 
13
- 中間テーブルとUsersテーブルはbelongs_to/has_manyの関係であることから、中間テーブルのデータ保存時にUserモデルのvalidationが作用していたことが推察された。
11
+ 中間テーブルとUsersテーブルはbelongs_to/has_manyの関係であることから、中間テーブルのデータ保存時にUserモデルのvalidationが作用し、saveメソッドが中止されていたことが推察された。
14
12
 
15
13
 
16
14
 
17
- - 方向性
15
+ - 検証・修正内容
18
16
 
19
17
  validationを削除することはUser新規登録に差し支えるため不可。
20
18
 
21
- そこで、validationのかかるタイミングをonオプションでUserの新規登録時に指定することを試してみる。
19
+ そこで、validationのかかるタイミングをonオプションでUserの新規登録時のみに指定
22
20
 
23
- →deviseのコントロラーカスマイズにて記述不備あり正しく検証ができていい(別主旨の質問内容となるめ別途質問を立ち上げる予定)
21
+ 以下の通り修正することで、User新規登録にも影響なく意図したデータ登録ができるように
24
22
 
25
23
 
24
+
25
+ ###修正前
26
+
27
+ Userモデル
26
28
 
27
29
  ```Ruby
28
30
 
29
31
  class User < ApplicationRecord
30
32
 
31
- # Include default devise modules. Others available are:
32
-
33
- # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
34
-
35
- devise :database_authenticatable, :registerable,
36
-
37
- :recoverable, :rememberable, :validatable
33
+ #該当箇所抜粋
38
-
39
-
40
34
 
41
35
  japanese_letters = /\A[ぁ-んァ-ン一-龥]+\z/
42
36
 
@@ -69,3 +63,63 @@
69
63
  end
70
64
 
71
65
  ```
66
+
67
+ ###修正後
68
+
69
+ Userモデル
70
+
71
+ ```Ruby
72
+
73
+ class User < ApplicationRecord
74
+
75
+ #該当箇所抜粋
76
+
77
+ japanese_letters = /\A[ぁ-んァ-ン一-龥]+\z/
78
+
79
+ with_options presence: true, on: :registration do |registration|
80
+
81
+ registration.validates :last_name, format: { with: japanese_letters, message: 'is not full-width characters' }
82
+
83
+ registration.validates :first_name, format: { with: japanese_letters, message: 'is not full-width characters' }
84
+
85
+ registration.validates :email, uniqueness: { case_sensitive: true },
86
+
87
+ format: { with: /\w+([-+.]\w+)*@\w+([-.]\w+)*/ }
88
+
89
+ registration.validates :password, length: {minimum: 6 },
90
+
91
+ format: { with: /\A(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]+\z/,
92
+
93
+ message: 'includes both half-width letters and half-width numbers' }
94
+
95
+ registration.validates :company, :password_confirmation
96
+
97
+ end
98
+
99
+ ```
100
+
101
+ 新たに生成しカスタマイズしたdeviseのcontroller
102
+
103
+ ```Ruby
104
+
105
+ class Users::RegistrationsController < Devise::RegistrationsController
106
+
107
+ #変更箇所付近を抜粋
108
+
109
+ def create
110
+
111
+ build_resource(sign_up_params)
112
+
113
+
114
+
115
+ resource.save(context: :registration) ←save以降を追記
116
+
117
+ yield resource if block_given?
118
+
119
+ if resource.persisted?
120
+
121
+ (後略)
122
+
123
+ end
124
+
125
+ ```