【52日目】【1日20分のRailsチュートリアル】【第6章】演習の2.と3.
今日は「6.5 演習」の2.から。
6.5 演習
- before_saveコールバック内でemail.downcase!と書き、email属性を直接変更してもよいことを、テストスイートを走らせて確認してください (リスト6.42のように書いてもよいことを、テストスイートを実行して確認してください。
before_save
でemail属性を直接小文字に変換するようにコード変更。
app/models/user.rb
before_save { email.downcase! }
テストは特に問題なし。
$ bundle exec rake test 19 tests, 38 assertions, 0 failures, 0 errors, 0 skips
下記ページ読んだ感じはdowncase
メソッドはdowncase!
として使うこともよくあるのかな…?という印象。
まぁ小文字にするだけだしそんな影響ないよね。たぶん。
まずfoo@bar..com
をテストでチェックするメールアドレスに追加する。
下記のinvalid_addressesに追加。
test/models/user_test.rb
test "email validation should reject invalid addresses" do invalid_addresses = %w[user@example,com user_at_foo.org user.name@example. foo@bar_baz.com foo@bar+baz.com foo@bar..com] invalid_addresses.each do |invalid_address| @user.email = invalid_address assert_not @user.valid?, "#{invalid_address.inspect} should be invalid" end end
テスト実行すると失敗します。
$ bundle exec rake test FAIL["test_email_validation_should_reject_invalid_addresses", UserTest, 2016-08-09 12:46:01 +0000] test_email_validation_should_reject_invalid_addresses#UserTest (1470746761.54s) "foo@bar..com" should be invalid
リスト6.43の通り、app/models/user.rb
の正規表現を
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
から
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
に変更。
(\.[a-z\d\-]+)*
が増えてます。
中身の理解は諦めました。。。正規表現はまたいつか。
テスト実行して今度は問題ないことを確認。
$ bundle exec rake test 19 tests, 39 assertions, 0 failures, 0 errors, 0 skips
これで第6章の演習は終了です。Railsチュートリアルは全部で12章なのでやっと半分!
今日の作業時間は【26分】。
次は「第7章 ユーザー登録」から。