【Devise】must exist의 대처법
이런 분들에게
Too Long, Didn't Read
application_controller.rb
에 부분적으로 strong parameter를 써서 해결
환경
신규 등록에 필요한 정보
User 모델을 다음 명령으로 만듭니다.
terminal$ rails g devise User
다양한 파일이 생성되지만, 그 안에 있는 마이그레이션 파일을 확인해 보겠습니다.
migrate/timestamp_devise_create_users.rb# frozen_string_literal: true
class DeviseCreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
.
.
.
end
end
Database authenticable에서 볼 수 있듯이 기본적으로 인증에 email과 password가 필요하다는 것을 알 수 있습니다.
인증에 name도 필요하고 싶기 때문에 다음의 커멘드로 users 테이블에 string형의 name 컬럼을 추가합니다.
terminal$ rails g migration AddNameToUsers name:string
마이그레이션 파일이 생성되므로 다음 명령으로 데이터베이스에 반영합니다.
terminal$ rails db:migrate
이것으로 name 컬럼도 추가할 수 있었고, 밸리데이션과 폼을 확실히 설정! !
계정 등록!
응?
분명히 name이 must exist라는 것.
이름을 입력하는 데 값이 없다는? 라는 느낌이지만 여기서 strong parameter의 존재를 기억한다.
devise를 사용하기 전까지는 신규 등록등의 기구를 담당하는 컨트롤러에 프라이빗 메소드로서 기술하고 있던 기억이 있었으므로, 그것을 따라 컨트롤러를 들여다 본다.
controllers/users/registrations_controller.rb .
.
.
# If you have extra params to permit, append them to the sanitizer.
# def configure_account_update_params
# devise_parameter_sanitizer.permit(:account_update, keys: [:attribute])
# end
.
.
.
그것 같은 설명은 있었지만 모두 코멘트 아웃되어 있어 어떤 것! ? 라는 느낌이었기 때문에 devise의 Github를 보면 이런 설명이 있었다.
참고 : heartcombo/devise
요점은 application_controller.rb
에 부분적으로 strong parameter를 써 주면 좋다.
controllers/application_controller.rbclass ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
# ↑も記述
protected
def configure_permitted_parameters
added_attrs = [:name] #追加したparams
devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
end
end
이걸로 다녔어,,,
야타네!
Reference
이 문제에 관하여(【Devise】must exist의 대처법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/10tofu01/items/85bf3f7d85887f602d48
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ rails g devise User
# frozen_string_literal: true
class DeviseCreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
.
.
.
end
end
$ rails g migration AddNameToUsers name:string
$ rails db:migrate
.
.
.
# If you have extra params to permit, append them to the sanitizer.
# def configure_account_update_params
# devise_parameter_sanitizer.permit(:account_update, keys: [:attribute])
# end
.
.
.
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
# ↑も記述
protected
def configure_permitted_parameters
added_attrs = [:name] #追加したparams
devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
end
end
Reference
이 문제에 관하여(【Devise】must exist의 대처법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/10tofu01/items/85bf3f7d85887f602d48텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)