阅读 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)中,他设置了区分大小写。
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
什么?如果他要进行不区分大小写的验证,为什么要将副本转换为大写?
最后,在 6.20 中,他设置了一个before_save
将新用户的电子邮件转换为小写的块。
before_save { self.email = email.downcase }
这很有意义,因为您希望数据库中使用小写字母。但是我对他为什么在测试中使用大写感到困惑,因为无论如何保存都会将电子邮件地址转换为小写。我错过了一些明显的东西吗?