ActiveRecord::Validation::valid?
任意のタイミングでオブジェクトに対してバリデーションを行うメソッド。
問題があった場合はmember.errors.messages
でエラーメッセージを確認できる。
バリデーションせずにオブジェクトを作成
$ cd app/samurai/valid-demo
$ bin/rails console
>member = Member.new()
上記の様にMemberを作成した時に、
仮にnameを文字数を1〜10文字で制限をかけていたとしても
=> #<Member id: nil, name: nil, mail_magazine: nil, email: nil, post_code: nil, tel: nil, created_at: nil, updated_at: nil>
作成されてしまいます。
ActiveRecord::Validation::valid?でバリデーションする
member.valid?
=> false
バリデーションの結果、失敗しました。
member.save
【実行結果】
(0.1ms) begin transaction
(0.2ms) rollback transaction
=> false
エラーメッセージに対応せず保存しようとするとロールバックし失敗する。
※member.save(validate: false)とすれば、強制的に保存できます。
コンテキストを指定してバリデーションすることができる
# nameの文字数は、1文字から10文字まで
validates :name,
length: { minimum: 1, maximum: 10 }, on: :create
# 更新時は、1文字から20文字まで
validates :name,
length: { minimum: 1, maximum: 20 }, on: :update
上記のコードはnameを新規作成の時は1〜10文字、編集の時は1〜20文字に制限を指定している。