邁克爾哈特爲Ruby on Rails提供的出色的tutorial工作方式。我正在創建一個測試來檢查重複的電子郵件地址,我對使用upcase,downcase和不區分大小寫的檢查有點困惑。Ruby on Rails教程 - upcase/downcase和不區分大小寫的奇怪用法
(清單6.17)的測試看起來是這樣的:
describe User do
before do
@user = User.new(name: "Example User", email: "[email protected]")
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 }
什麼?爲什麼他會將副本轉換爲大寫,如果他要做一個不區分大小寫的驗證?
最後,在6.20中,他設置了一個before_save
塊,將新用戶的電子郵件轉換爲小寫。
before_save { self.email = email.downcase }
這很有道理,因爲您希望在數據庫中使用小寫字母。但我很困惑,爲什麼他在測試中使用了大寫字母,因爲保存會將電子郵件地址轉換爲小寫字母。我錯過了明顯的東西嗎?