私はrubyonrailsチュートリアルをフォローしています。そして、私はいくつかの質問があります:
1.それはそれが示されている
>> "a" * 51
=> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
したがって、次のコードを入力して、ユーザーの名前が51文字ではなく51文字であるかどうかを比較しようとします。
before { @user.name = "a" * 51 }
("a" * 51).lengthが51であることも示されています。
したがって、{@ user.name =( "a" * 51).length}の前に記述しないのはなぜですか。ユーザー名が51 aではなく51文字で構成されるように、より論理的です。
2.そしてまた、この瞬間は非常に奇妙に思えます。説明も奇妙です。
describe "when email address is already taken" do
before do
1. user_with_same_email = @user.dup
2. user_with_same_email.save
end
it { should_not be_valid }
end
1.では、元のユーザー(たとえば、foo = User.new(name: "Piks"、email: "piks@piks.com")を複製し、fooのコピーを変数user_with_same_emailに配置します。 fooのコピーとそれは「true」を返すので、コピーを保存し、元のfooはデータベースにすでに存在する電子メールアドレスを持っているため、無効になります。
しかし、元のfooを無効にするには、どうすれば保存できますか?ユーザーのコピーを保存することは論理的にはまったく論理的ではなく、元のユーザーは無効になります。
「ブロック前」を誤解していると思います。「beforeblock」、つまりメソッドuser_with_same_email.saveは「false」を返す必要があります。たとえば、データベースに電子メールがいっぱいあり(ログインもあります)、データベースにすでに存在する電子メールに自分自身を登録しようとしているためです。したがって、システムは私のコピーを作成し、それをuser_with_same_emailに保存して保存しようとしますが、私の電子メールを持つ別のユーザーがデータベースにすでに存在するため、保存できません。したがって、メソッドuser_with_same_email.saveはfalseを返すため、無効なユーザーと見なされます。
この例では、「beforeblock」はroderで「true」を返してそれに進む必要があります{should_not be_valid}または私は間違っていますか?
誰かが私を助けてくれたらありがたいです。ありがとうございました