【Rails】update 액션이 통과하지 않는 이유를 잘못 검증해 온 이야기(update)
1. 하고 싶은 일
gem devise를 이용하여 유저 등록(명칭은 owner로 하고 있다) 기능을 실장 완료.
비밀번호를 입력하지 않고 등록된 데이터를 편집하려고 하는 것도 에러가 일어나, 그 해결에 쓸데없이 상당히 고민해 버린 이야기.
2. 실행 환경
Ruby 2.6.5
Rails 6.0.3
3. 전제로 만들어진 준비
devise 측의 사양에 따라 다음 두 가지 준비가 필요했습니다.
①account_update시에 디폴트 컬럼 이외의 컬럼의 값을 허용한다(sanitizer)
②password 없이 업데이트를 허용한다.
공식 여기 라든지 여기 의 기사를 보면 할 수 있을까 생각합니다. Qiita도 조사하면 가득 있을 것입니다.
이것들은 할 수 있었는데 이하와 같이 왜인지 잘 업데이트 보존을 할 수 없고, devise의 사양 때문인가・・・? 라고 괴롭히고 고민하는 것에.
위의 에러 검증을 하고 있고 나는 이하와 같이 고민하고 있었던 것이었습니다.
1.ArgumentError given 0~이 되어 있으므로, 원래 괜찮은 인수가 건네받지 않은 것은? (하지만 params는 제대로 다니고 있습니다 ...)
2. 에러 메세지가 패스워드라고 하는 것은, 역시 devise의 패스워드 없음 갱신이 잘 되어 있지 않은 것은 아닌가?
4. 결론
비밀번호 유효성 검사가 걸려서 오류가 발생했습니다.
owner.rbclass Owner < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :name, presence: true
validates :email, presence: true, uniqueness: true, format: { with: VALID_EMAIL_REGEX}
validates :password, presence: true, confirmation: true, length: { minimum: 7 }
has_many :shops
end
상기 모델의 밸리데이션이 update시에도 걸려 있어, 그래서 에러가 나온 형태입니다.
잘 생각하면 밸리데이션으로 설정한 에러 메세지가 출력되고 있기 때문에 당연하네요, 원래.
그래서
owner.rbclass Owner < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :name, presence: true
validates :email, presence: true, uniqueness: true, format: { with: VALID_EMAIL_REGEX}
validates :password, presence: true, confirmation: true, length: { minimum: 7 },on: :create
has_many :shops
end
이런 식으로 패스워드의 밸리데이션을 create시만의 설정으로 해 주면 해결했습니다.
5. 진흙 늪에 빠진 실수
방금 전의 binding.pry시의 에러 메세지에 대해서, 나는 여기서 인수가 잘 되지 않았다고 생각하고 있었습니다만, 그 인식이 원래 잘못하고 있어서.
controller의 update 액션으로 제대로 인수가 건너온 후에, 디버그 화면에서 한번 더 update를 실행하고 있는군요, 이것이라고.
그래서 제가 이 화면에서 했던 update에는 인수가 지정되어 있지 않기 때문에, 그럼 인수 없어라는 오류가 일어나고 있을 뿐입니다.
이 흐름을 제대로 이해할 수 있어 좋지 않기 때문에 끝난 실수였습니다 ... 반성.
Reference
이 문제에 관하여(【Rails】update 액션이 통과하지 않는 이유를 잘못 검증해 온 이야기(update)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sa_tech0518/items/9ae355d47952d42d3c9c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Ruby 2.6.5
Rails 6.0.3
3. 전제로 만들어진 준비
devise 측의 사양에 따라 다음 두 가지 준비가 필요했습니다.
①account_update시에 디폴트 컬럼 이외의 컬럼의 값을 허용한다(sanitizer)
②password 없이 업데이트를 허용한다.
공식 여기 라든지 여기 의 기사를 보면 할 수 있을까 생각합니다. Qiita도 조사하면 가득 있을 것입니다.
이것들은 할 수 있었는데 이하와 같이 왜인지 잘 업데이트 보존을 할 수 없고, devise의 사양 때문인가・・・? 라고 괴롭히고 고민하는 것에.
위의 에러 검증을 하고 있고 나는 이하와 같이 고민하고 있었던 것이었습니다.
1.ArgumentError given 0~이 되어 있으므로, 원래 괜찮은 인수가 건네받지 않은 것은? (하지만 params는 제대로 다니고 있습니다 ...)
2. 에러 메세지가 패스워드라고 하는 것은, 역시 devise의 패스워드 없음 갱신이 잘 되어 있지 않은 것은 아닌가?
4. 결론
비밀번호 유효성 검사가 걸려서 오류가 발생했습니다.
owner.rbclass Owner < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :name, presence: true
validates :email, presence: true, uniqueness: true, format: { with: VALID_EMAIL_REGEX}
validates :password, presence: true, confirmation: true, length: { minimum: 7 }
has_many :shops
end
상기 모델의 밸리데이션이 update시에도 걸려 있어, 그래서 에러가 나온 형태입니다.
잘 생각하면 밸리데이션으로 설정한 에러 메세지가 출력되고 있기 때문에 당연하네요, 원래.
그래서
owner.rbclass Owner < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :name, presence: true
validates :email, presence: true, uniqueness: true, format: { with: VALID_EMAIL_REGEX}
validates :password, presence: true, confirmation: true, length: { minimum: 7 },on: :create
has_many :shops
end
이런 식으로 패스워드의 밸리데이션을 create시만의 설정으로 해 주면 해결했습니다.
5. 진흙 늪에 빠진 실수
방금 전의 binding.pry시의 에러 메세지에 대해서, 나는 여기서 인수가 잘 되지 않았다고 생각하고 있었습니다만, 그 인식이 원래 잘못하고 있어서.
controller의 update 액션으로 제대로 인수가 건너온 후에, 디버그 화면에서 한번 더 update를 실행하고 있는군요, 이것이라고.
그래서 제가 이 화면에서 했던 update에는 인수가 지정되어 있지 않기 때문에, 그럼 인수 없어라는 오류가 일어나고 있을 뿐입니다.
이 흐름을 제대로 이해할 수 있어 좋지 않기 때문에 끝난 실수였습니다 ... 반성.
Reference
이 문제에 관하여(【Rails】update 액션이 통과하지 않는 이유를 잘못 검증해 온 이야기(update)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sa_tech0518/items/9ae355d47952d42d3c9c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
비밀번호 유효성 검사가 걸려서 오류가 발생했습니다.
owner.rb
class Owner < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :name, presence: true
validates :email, presence: true, uniqueness: true, format: { with: VALID_EMAIL_REGEX}
validates :password, presence: true, confirmation: true, length: { minimum: 7 }
has_many :shops
end
상기 모델의 밸리데이션이 update시에도 걸려 있어, 그래서 에러가 나온 형태입니다.
잘 생각하면 밸리데이션으로 설정한 에러 메세지가 출력되고 있기 때문에 당연하네요, 원래.
그래서
owner.rb
class Owner < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :name, presence: true
validates :email, presence: true, uniqueness: true, format: { with: VALID_EMAIL_REGEX}
validates :password, presence: true, confirmation: true, length: { minimum: 7 },on: :create
has_many :shops
end
이런 식으로 패스워드의 밸리데이션을 create시만의 설정으로 해 주면 해결했습니다.
5. 진흙 늪에 빠진 실수
방금 전의 binding.pry시의 에러 메세지에 대해서, 나는 여기서 인수가 잘 되지 않았다고 생각하고 있었습니다만, 그 인식이 원래 잘못하고 있어서.
controller의 update 액션으로 제대로 인수가 건너온 후에, 디버그 화면에서 한번 더 update를 실행하고 있는군요, 이것이라고.
그래서 제가 이 화면에서 했던 update에는 인수가 지정되어 있지 않기 때문에, 그럼 인수 없어라는 오류가 일어나고 있을 뿐입니다.
이 흐름을 제대로 이해할 수 있어 좋지 않기 때문에 끝난 실수였습니다 ... 반성.
Reference
이 문제에 관하여(【Rails】update 액션이 통과하지 않는 이유를 잘못 검증해 온 이야기(update)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sa_tech0518/items/9ae355d47952d42d3c9c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【Rails】update 액션이 통과하지 않는 이유를 잘못 검증해 온 이야기(update)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sa_tech0518/items/9ae355d47952d42d3c9c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)