MichaelHartlの[RailTutorial]の第6章にあるRSpecコードを見ています:http://ruby.railstutorial.org/chapters/modeling-users#code:validates_uniqueness_of_email_test。これは、ユーザーモデルの電子メール属性の一意性検証方法をテストするために作成されました。次のようになります。
リスト6.18。重複する電子メールアドレスを拒否するためのテスト。(* spec / models / user_spec.rb *)
require 'spec_helper'
describe User do
before do
@user = User.new(name: "Example User", email: "user@example.com")
end
subject { @user }
.
.
.
describe "when email address is already taken" do
before do
user_with_same_email = @user.dup
user_with_same_email.save
end
it { should_not be_valid }
end
end
そして、これがユーザーモデル検証コードです:
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
uniqueness: true
私の質問は、検証は実際にどのように機能するのかということです。 同じ電子メールアドレスを持つユーザーがすでにデータベースに保存されており、@ userインスタンスのRails検証は、保存しようとする前に無効として返されますか?Railsバリデーターは、ユーザーのインスタンスがメモリに格納されているだけで、現在データベースに追加しようとしていない場合でも、現在のデータを使用してユーザーのインスタンスを検証しますか?