LoginSignup
0
0

More than 5 years have passed since last update.

Rails Tutorial6.2.5 補足

Last updated at Posted at 2018-09-28

演習2

テストスイートの実行結果を確認しながら、before_saveコールバックをemail.downcase!に書き換えてみましょう。ヒント: メソッドの末尾に!を付け足すことにより、email属性を直接変更できるようになります (リスト 6.34)。

class User < ApplicationRecord
  before_save { email.downcase! } #ココ!
  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
end

コールバックメソッドを用いて、データベースに保存する前にdowncase!!を使用する演習です。
演習を行った後に、そのまま6.3/6.3.2に行くと新たな設定を加えた後にリスト6.40にてテスト結果がGreenになることを想定しているのですが、当然ながら、結果はRedとなり帰ってきます。

対処

terminalにて返ってくるエラーより、問題となる箇所はemail address should be uniqueになります。
そこで/test/models/user_test.rbに移動して

    test "email addresses should be unique" do
     duplicate_user = @user.dup
     duplicate_user.email = @user.email.upcase! #ココ! "!"を加える
     @user.save
     assert_not duplicate_user.valid?
  end

/models/user.rbにてコールバックメソッドにて!を用いた書き換えを行っているので、それに対応するようにテストコードにも!を記述しなければいけないのですが、演習では「書き換えてみましょう!」で確認することまでは記述されていないので忘れてしまってはいけないわけですね。
さして引っかかることもないかと思いますがテストを書き慣れていないので、備忘録になります・・。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0