はじめに
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
を用いてエラーを格納するようにします。
true
やfalse
を返すメソッドではないということに注意しましょう。