Ruby on Rails 6.2 validation

Ruby on Rails 6.2 validationをやりました。

バリデーションはテストファーストのほうがいいらしいです。


test/model/user_test.rb
コメントでひな形ある。

・setupが最初に走る
・rails t
・rails testt:models

・チェック
modelにvalidationをつける。
validates( :name, presence:true )
validates( :name, length:{maximum:50} )

VALID_EMAIL_REGEX = /\A[\w+\-_]+@[a-z\d\-.]+\.[a-z]+\z/i
validates( :email, format:{with: VALID_EMAIL_REGEX } )
#validates( :email, uniqueness:true )
validates( :email, uniqueness:{ case_sensitive:false } )

#↑メモリ上だけ?ちゃんとDBへの問い合わせでエラーになってる?
# ※1末尾検証を参照

user.valid?
false
user.errors.full_messages
[“Name can’t be blank”]

u.errors.messages[:name].split().join

インデックスを張る
rails generate migration add_index_to_users_email
db/migrationのchangeを修正
rails db:migrate

コールバック

modelに。

下記は強制小文字化。

before_save{ self.email = self.email.downcase }

復習
address1=%w[adr1, adr2, adr3]
address2=”adr1, adr2, adr3″.split(‘ ‘)

addresses.each{|adr| puts adr}

#※1
u=User.new(name:”alice”, email:”alice@localhost.com”)
↑どちらもこのuでテスト

#1
>> u.valid?
=> true

#2
>> u.valid?
=> true

#1
>> u.save
(6.1ms) commit transaction
=> true

#2
>> u.valid?
=> false

コメントを残す

メールアドレスが公開されることはありません。