4

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(...) 会有一个保存,但不是新方法。谢谢!

4

1 回答 1

4

您不会错过隐式保存。

user_with_same_email确实保存正确(就我个人而言,我会一直使用 save! 来确保它不会默默地失败)

@user规范指定的是无法保存主题(即),因为数据库中存在具有相同电子邮件的行。

于 2012-12-25T23:10:21.907 回答