Rails | バリデーション validates と validate の違い


モデル(model)にバリデーションを書く際に使い分けすることがあったのでメモ。

それぞれの違いについて

validates

標準のバリデーションを書くときはこれ

使い方はRailsガイドを参照
https://railsguides.jp/active_record_validations.html

validate

自分でオリジナルのバリデーション用メソッドを書くときはこれ

validateの使用例

model
validate :photo_size, :photo_length

private
  def photo_size
    photos.each do |photo|
      if photo.blob.byte_size > 5.megabytes
      photo.purge
      errors.add(:photos, "は1つのファイル5MB以内にしてください")
      end
    end
  end

  def photo_length
    if photos.length > 10
      photos.purge
      errors.add(:photos, "は10枚以内にしてください")
    end
  end

私はActiveStorageでバリデーションを作成した際に違いに気づき、疑問に思ったので残しておきます。