0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails 5.0】モデルにカスタムバリデーターを実装する

Last updated at Posted at 2020-07-29

はじめに

Railsのバリデーションですが、自分で作ることができます。

モデル内に自作する

Personのname属性に"ウンコ"という文字列が含まれていたらDBに登録できないようにします。
下品な名前は許しません()

person.rb
class Person < ApplicationRecord
  before_save :include_unko

  private
  # Personモデルでしか使わないのでPrivateメソッドにしておく
  def include_unko
    if name.include?("ウンコ")
      errors.add(:name, "に下品な言葉が含まれています")
    end
  end

end

# キャンチョメとウンコティンティンをPersonに登録してみましょう。
person_1 = Person.create(name: "キャンチョメ")
person_1.valid? # => true
person_1.erros # => nil

person_2 = Person.create(name: "ウンコティンティン")
person_2.valid? # => false
person_2.errors.full_message
# => ["Name に下品な言葉が含まれています"]

カスタムバリデーターの戻り値について

valid?(もしくはinvalid?)メソッドを使って、バリデーションを手動でトリガできます。
バリデーションメソッドを実行した後、オブジェクト(今回ではperson_1とperson_2)にエラー(errors)がない場合はtrueが返され、そうでなければfalseが返されます。
したがって、カスタムバリデーターを実装したら必ずerrors.addを用いてエラーを格納するようにします。
truefalseを返すメソッドではないということに注意しましょう。

参考

Active Record バリデーション - Railsガイド

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?