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 に答える