LoginSignup
0
0

More than 3 years have passed since last update.

【Rails】ActiveRecord::Validation::valid?

Last updated at Posted at 2020-03-07

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文字に制限を指定している。

0
0
0

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