Kanioの日記

ジャンルが定まらず、混沌としています。

Rails Validation - IT開発備忘録

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