【发布时间】:2013-08-24 19:41:20
【问题描述】:
通过 Michael Hartl 为 Ruby on Rails 编写的出色的 tutorial 工作。他正在创建一个检查重复电子邮件地址的测试,我对他使用大写、小写和不区分大小写的检查感到有点困惑。
测试(清单 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 }
这很有意义,因为您需要在数据库中使用小写字母。但是我对他为什么在测试中使用大写感到困惑,因为无论如何保存都会将电子邮件地址转换为小写。我错过了什么明显的东西吗?
【问题讨论】:
标签: ruby-on-rails ruby rspec railstutorial.org