고유성 검증
사용자가 등록할 때 어떻게 사용자의 유일성을 보증합니까
예를 들어 rails는 기본적으로 대소문자를 구분하기 때문에 이미 존재할 때[email protected]저장[email protected], 두 개의 다른 이메일, 즉valid?반환된 것은 true이지만 실제 이메일 주소는
대소문자를 구분하지 않습니다.
$ rails console --sandbox
>> user = User.create(name: "Example User", email: "[email protected]")
>> user.email.upcase
=> "[email protected]"
>> user_with_same_email = user.dup
>> user_with_same_email.email = user.email.upcase
>> user_with_same_email.valid?
=> true
1. modle 층에서validates는 선택할 수 있는 매개 변수 uniqueness: {case_senstive:false}를 제공합니다
이메일의 대소문자를 구분하지 않음
class User < ActiveRecord::Base
.
.
.
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
end
만약 방문량이 매우 많을 때, 동시에 등록된 두 사용자의 이메일이 같다면, 발생할 수 있다
이때 데이터베이스 층에도 유일성 제한을 붙여야 한다. 데이터베이스에서email열에 색인을 만들고 색인에 유일성 제한을 붙여야 한다.
$ rails generate migration add_index_to_users_email
생성된 이전 파일에 다음과 같은 코드를 수동으로 추가해야 합니다. rails가 정의된 템플릿이 없기 때문입니다.
class AddIndexToUsersEmail < ActiveRecord::Migration
def change
add_index :users, :email, unique: true
end
end
위의 코드는 Rails의
add_index
방법을 호출하여 users
테이블의 email
열을 인덱스합니다.색인 자체가 유일성을 보장할 수 없기 때문에 unique: true
을 지정해야 한다.$ bundle exec rake db:migrate
이메일 주소의 유일성을 확보하기 위해서는 데이터베이스에 저장하기 전에 이메일 주소를 전체 소문자 형식으로 바꾸는 수정을 해야 한다. 모든 데이터베이스 어댑터의 인덱스가 대소문자를 구분하는 것이 아니기 때문이다.이를 위해 우리는 콜백 함수(callback)를 사용해야 한다. Active Record 대상의 생명주기의 특정 시간에 호출하는 콜백 함수
before_save
는 사용자가 데이터베이스에 저장하기 전에 이메일 주소를 전체 소문자 형식으로 강제로 변환하는 것이다class User < ActiveRecord::Base
attr_accessible :name, :email
before_save { |user| user.email = email.downcase }
.
.
.
end
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
kintone에서 사용하는 메일 서비스 요약kintone에는 이른바 메일 서버 기능이 없기 때문에, 예를 들면 「고객 마스터에 등록된 메일 주소로 메일을 송신한다」라고 하는 경우는 외부의 메일 서비스를 이용하게 됩니다. kintone 개발시 자주 사용하는 메...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.