Michael Hartl的rails教程6.20列出了以下代码:
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
我无法理解这个概念,因为@ user.dup返回完全相同的对象的表示,该对象被复制到user_with_same电子邮件,但@user从未保存到文件中的任何位置的数据库中。因此,user_with_same_email.save测试每次都应该有效。但是,测试通过了。有人请解释一下...... @ user = User.new(...)是否存在隐式数据库?我知道如果是User.create(...)会有一个保存,但不是新方法。谢谢!
答案 0 :(得分:4)
您没有错过隐式保存。
user_with_same_email
确实保存正确(我个人总是会使用save!以确保它没有以静默方式失败)
规范的内容是主题(即@user
)无法保存,因为数据库中存在同一封电子邮件的行。