Documentを読むと大体解決する。
Active Record Validations — Ruby on Rails Guides
普通のValidation
基本覚えられないので、都度ドキュメントを見た方が早い。省略。
Custom Method
自分でvalidationの方法を書きたい場合。
validates を validate にして、自分で書いた validation の method を指定する。よくよく考えると、あんまり困ったことはない。
validate :hoge def hoge if self.name == "mogemoge" errors.add(:base, "mogemoge はダメです") end end
Custom Validation
自分でvalidationの方法を書きたい場合、その2。
ActiveModel::EachValidator を継承したクラスを用意して呼び出す。Custom Method と違ってどこでも使えるのが良い。
ファイルはapp/validatorsフォルダでも作って、そこに置いておく。たまにpathを通すのを忘れる。
# app/validators/hoge_validator.rb class HogeValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) # 省略 end end
複合ユニーク制約
Documentから。気をつけるべくは、MySQLの場合は指定したカラムをnot nullにしとかないと予想外のデータが入ってしまうこと?
class Holiday < ApplicationRecord
validates :name, uniqueness: { scope: :year, message: "should happen once per year" }
end
備忘録の一覧はこちら
mokuzukanio.hatenablog.com