Rails Devise에서 DB 열 독립적 인 항목 추가

4411 단어 Railsdevise

하고 싶은 일





사용자 등록시 이용 약관에 동의하는 것을 실현하고 싶지만, 일부러 그것용의 컬럼을 만들 정도는 아니다.

이 메서드는 양식이 제출될 때 사용자 인터페이스의 확인란이 선택되어 있는지 확인합니다. 사용자에게 서비스 이용 조항에 대한 동의, 어떤 문서를 보는 등을 의무화하는데 사용하는 것이 전형적인 이용법입니다. Rails Guide > aceptance

이 도우미 사용

확인 환경


  • devise (4.3.0)
  • rails (5.1.6)

  • Model 업데이트



    모델에 체크했는지의 플래그를 갖게한다.
    등록시에만 밸리데이션 하고 싶기 때문에 on: :create 로 스코프를 짜낸다.

    app/models/user.rb
    class User < ApplicationRecord
        validates :registration_check, acceptance: true, on: :create
    end
    
    attr_accessor 등으로 액세서를 사용하는 샘플도 있지만,이 validates를 기술하는 것만으로 좋다.

    'acceptance'는 데이터베이스에 저장할 필요가 없습니다. 저장을 위한 필드를 작성하지 않으면 헬퍼는 단순히 가상 속성을 작성합니다. Rails Guide > aceptance

    당연하지만이 설명을하지 않으면 View에서 오류가 발생합니다.


    약간 빠졌지만, 다음 항의 Strong Parameter 의 설정을 하지 않으면, 이 밸리데이션은 정상적으로 동작하지 않고, 체크를 넣지 않아도 등록이 생겨 버리므로 주의.

    Strong Parameter / Controller 업데이트



    Devise Controller를 Override로 커스터마이징합니다.

    그 밖에도 Application Controller에서 before_action 등으로 수행하는 방법도 있는 것 같지만, ApplicationController에는 쓰고 싶지 않았기 때문에 채용하지 않았다.

    컨트롤러의 병아리를 생성하고 해당 위치를 주석 처리하여 활성화합니다.
    $ bundle exec rails g devise:controllers users
    

    app/controllers/users/registrations_controller.rb
    class Users::RegistrationsController < Devise::RegistrationsController
       before_action :configure_sign_up_params, only: [:create]
    
       •••
    
       protected
    
       # If you have extra params to permit, append them to the sanitizer.
       def configure_sign_up_params
         devise_parameter_sanitizer.permit(:sign_up, keys: [:registration_check])
       end
    end
    

    View 업데이트



    뷰의 병아리를 생성하고 registration_check를 추가했습니다.
    $ rails g devise:views users
    

    app/views/devise/registrations/new.html.slim
    .field
        = f.check_box :registration_check
        = f.label :registration_check
    

    참고


  • Devise > Strong Parameters
  • Rails Guide > aceptance
  • 좋은 웹페이지 즐겨찾기