[Rails]devise에서 생각하지 않는 검증 오류
소개
유저 관리로 신세를 지고 있는 devise로 생각하지 않는 에러에 빠져, 상당한 시간을 녹였으므로 비망록으로서 남겨 둡니다.
환경/Gem(ver)
결론
스스로 User 모델에 validates를 걸 때는 조심하자.
제대로 아래 조사를 하고 향후 구현하도록 합니다. .
전제
devise 를 bundle install 후, 다음과 같이 User 모델에 밸리데이션을 걸고 있었습니다.
password에는 7자 이상의 제한을 걸고 싶었습니다.
이제 신규 사용자 등록은 문제 없었습니다.
※User와 Shop는 다대다의 관계로 중간 테이블에 Stylist 테이블이 있는 이미지로 구현하고 있습니다.
(models/user.rb)
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :stylists
has_many :shops, through: :stylists
(省略)
validates :password, presence: true, length: { minimum: 7 }, format: { with: /(?=.*\d+.*)(?=.*[a-zA-Z]+.*)./ }
end
현상
사용자(User 모델) 등록 후 신규로 숍(Shop 모델)을 작성과 동시에 중간 테이블(Stylist 모델)을 작성하려고 하면, 에러.
파라미터에는 제대로 값이 들어가 있고, 무엇이 「부정한 값」인가, 그 원인이 찾아내지 못하고.
또, 「신규 등록(new/create)은 할 수 없지만 편집(edit/update)은 할 수 있다」라고 하는 상황에서, 수수께끼가 깊어져, 많은 시간을 녹였습니다. .
가설
외래 키 nil을 허용하면 해결할 수 있습니까?
(models/stylist.rb)
class Stylist < ApplicationRecord
#修正前
belongs_to :shop
belongs_to :user
#修正後
belongs_to :shop, optional: true
belongs_to :user, optional: true
end
...안돼요.
해결책
밸리데이션에 원인이 있는 것은 틀림없기 때문에, User 모델에 기술하고 있는 validates를 하나하나 해제하면서, 거동을 확인해 가면,
(models/user.rb)
class User < ApplicationRecord
(省略)
validates :password, presence: true, length: { minimum: 7 }, format: { with: /(?=.*\d+.*)(?=.*[a-zA-Z]+.*)./ }
end
↑ validates :password를 지우면 만사 해결이었습니다! !
그리고, 아래의 장소에 커스터마이즈 내용을 재기록했습니다.
(config/initializers/devise.rb)
class User < ApplicationRecord
(省略)
#修正前
config.password_length = 6..128
#修正後
config.password_length = 7..128
원래 왜 중간 테이블을 저장할 때 오류를 내뿜는가? 수수께끼 그대로입니다만, devise에는 디폴트의 밸리데이션이 있어, 자작한 밸리데이션과 좋지 않은 반응을 했을까라고 생각합니다. . (공부합니다)
또, 이하의 기사를 참고로 해, 커스터마이즈를 했는데 문제 없게 동작하고 있습니다!
참고 기사
htps : // 코 m / 히로키 헉 / / ms / 862284c60429 베 5 01cd
htps : // 기주 b. 코 m / 헤아 rt 코 m 보 / / ゔ ぃせ / うぃき / 쿠 s와 미제 미무 m 파스 ぉ rd ぇ
Reference
이 문제에 관하여([Rails]devise에서 생각하지 않는 검증 오류), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fumiya1753/items/40328d29467aecb29752
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
devise 를 bundle install 후, 다음과 같이 User 모델에 밸리데이션을 걸고 있었습니다.
password에는 7자 이상의 제한을 걸고 싶었습니다.
이제 신규 사용자 등록은 문제 없었습니다.
※User와 Shop는 다대다의 관계로 중간 테이블에 Stylist 테이블이 있는 이미지로 구현하고 있습니다.
(models/user.rb)
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :stylists
has_many :shops, through: :stylists
(省略)
validates :password, presence: true, length: { minimum: 7 }, format: { with: /(?=.*\d+.*)(?=.*[a-zA-Z]+.*)./ }
end
현상
사용자(User 모델) 등록 후 신규로 숍(Shop 모델)을 작성과 동시에 중간 테이블(Stylist 모델)을 작성하려고 하면, 에러.
파라미터에는 제대로 값이 들어가 있고, 무엇이 「부정한 값」인가, 그 원인이 찾아내지 못하고.
또, 「신규 등록(new/create)은 할 수 없지만 편집(edit/update)은 할 수 있다」라고 하는 상황에서, 수수께끼가 깊어져, 많은 시간을 녹였습니다. .
가설
외래 키 nil을 허용하면 해결할 수 있습니까?
(models/stylist.rb)
class Stylist < ApplicationRecord
#修正前
belongs_to :shop
belongs_to :user
#修正後
belongs_to :shop, optional: true
belongs_to :user, optional: true
end
...안돼요.
해결책
밸리데이션에 원인이 있는 것은 틀림없기 때문에, User 모델에 기술하고 있는 validates를 하나하나 해제하면서, 거동을 확인해 가면,
(models/user.rb)
class User < ApplicationRecord
(省略)
validates :password, presence: true, length: { minimum: 7 }, format: { with: /(?=.*\d+.*)(?=.*[a-zA-Z]+.*)./ }
end
↑ validates :password를 지우면 만사 해결이었습니다! !
그리고, 아래의 장소에 커스터마이즈 내용을 재기록했습니다.
(config/initializers/devise.rb)
class User < ApplicationRecord
(省略)
#修正前
config.password_length = 6..128
#修正後
config.password_length = 7..128
원래 왜 중간 테이블을 저장할 때 오류를 내뿜는가? 수수께끼 그대로입니다만, devise에는 디폴트의 밸리데이션이 있어, 자작한 밸리데이션과 좋지 않은 반응을 했을까라고 생각합니다. . (공부합니다)
또, 이하의 기사를 참고로 해, 커스터마이즈를 했는데 문제 없게 동작하고 있습니다!
참고 기사
htps : // 코 m / 히로키 헉 / / ms / 862284c60429 베 5 01cd
htps : // 기주 b. 코 m / 헤아 rt 코 m 보 / / ゔ ぃせ / うぃき / 쿠 s와 미제 미무 m 파스 ぉ rd ぇ
Reference
이 문제에 관하여([Rails]devise에서 생각하지 않는 검증 오류), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fumiya1753/items/40328d29467aecb29752
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
외래 키 nil을 허용하면 해결할 수 있습니까?
(models/stylist.rb)
class Stylist < ApplicationRecord
#修正前
belongs_to :shop
belongs_to :user
#修正後
belongs_to :shop, optional: true
belongs_to :user, optional: true
end
...안돼요.
해결책
밸리데이션에 원인이 있는 것은 틀림없기 때문에, User 모델에 기술하고 있는 validates를 하나하나 해제하면서, 거동을 확인해 가면,
(models/user.rb)
class User < ApplicationRecord
(省略)
validates :password, presence: true, length: { minimum: 7 }, format: { with: /(?=.*\d+.*)(?=.*[a-zA-Z]+.*)./ }
end
↑ validates :password를 지우면 만사 해결이었습니다! !
그리고, 아래의 장소에 커스터마이즈 내용을 재기록했습니다.
(config/initializers/devise.rb)
class User < ApplicationRecord
(省略)
#修正前
config.password_length = 6..128
#修正後
config.password_length = 7..128
원래 왜 중간 테이블을 저장할 때 오류를 내뿜는가? 수수께끼 그대로입니다만, devise에는 디폴트의 밸리데이션이 있어, 자작한 밸리데이션과 좋지 않은 반응을 했을까라고 생각합니다. . (공부합니다)
또, 이하의 기사를 참고로 해, 커스터마이즈를 했는데 문제 없게 동작하고 있습니다!
참고 기사
htps : // 코 m / 히로키 헉 / / ms / 862284c60429 베 5 01cd
htps : // 기주 b. 코 m / 헤아 rt 코 m 보 / / ゔ ぃせ / うぃき / 쿠 s와 미제 미무 m 파스 ぉ rd ぇ
Reference
이 문제에 관하여([Rails]devise에서 생각하지 않는 검증 오류), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fumiya1753/items/40328d29467aecb29752
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(models/user.rb)
class User < ApplicationRecord
(省略)
validates :password, presence: true, length: { minimum: 7 }, format: { with: /(?=.*\d+.*)(?=.*[a-zA-Z]+.*)./ }
end
(config/initializers/devise.rb)
class User < ApplicationRecord
(省略)
#修正前
config.password_length = 6..128
#修正後
config.password_length = 7..128
htps : // 코 m / 히로키 헉 / / ms / 862284c60429 베 5 01cd
htps : // 기주 b. 코 m / 헤아 rt 코 m 보 / / ゔ ぃせ / うぃき / 쿠 s와 미제 미무 m 파스 ぉ rd ぇ
Reference
이 문제에 관하여([Rails]devise에서 생각하지 않는 검증 오류), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fumiya1753/items/40328d29467aecb29752텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)