Michael Hartl のRuby on Rails に関する優れたチュートリアルに取り組んでいます。私は彼が電子メール アドレスの重複をチェックするテストを作成しているところで、大文字、小文字、および大文字と小文字を区別しないチェックの使用について少し混乱しています。
テスト (リスト 6.17) は次のようになります。
describe User do
before do
@user = User.new(name: "Example User", email: "user@example.com")
end
.
.
.
describe "when email address is already taken" do
before do
user_with_same_email = @user.dup
user_with_same_email.email = @user.email.upcase
user_with_same_email.save
end
it { should_not be_valid }
end
end
への呼び出しに注意してくださいupcase
。大丈夫だ。しかし、妥当性チェック (6.18) では、大文字と小文字の区別を offに設定しています。
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
何?大文字と小文字を区別しない検証を行うつもりだったのに、なぜコピーを大文字に変換したのでしょうか?
before_save
最後に、6.20 で、彼は新しいユーザーの電子メールを小文字に変換するブロックを設定します。
before_save { self.email = email.downcase }
データベースで小文字が必要なため、これは完全に理にかなっています。しかし、保存すると電子メールアドレスが小文字に変換されることを考えると、なぜ彼がテストで大文字を使用したのか、私は混乱しています。明らかな何かが欠けていますか?