Active Storage:画像ファイルのバリデーション

最近まで知らなかったが、Active Storage にはバリデーション用のgem があった。

 

gem 'active_storage_validations'

 

それまではgem を使わずにバリデーションを作っていたので、こんな感じだった。

 

models/application_recode.rb

class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true

ALLOWED_CONTENT_TYPES = %q{
image/jpeg
image/jpg
image/png
}
end

 

models/item.rb

class Item < ApplicationRecord

validates :image, presence: true
validate :check_image

private

def check_image
if image.respond_to?(:content_type)
unless image.content_type.in?(ALLOWED_CONTENT_TYPES)
errors.add(:image, "jpg, jpeg,pngのみアップロードできます")
end
if image.byte_size > 1.megabytes
errors.add(:image, "1MBまでアップロードできます")
end
end
end
end

 

 

 

active_storage_validations をbundle install してあげると

 

models/item.rb

validates :image, presence: true 
content_type: [:png, :jpg, :jpeg],
size: { less_than_or_equal_to: 1.megabytes },
dimension: { width: { max: 2000 }, height: { max: 2000 }}

 

これでできあがり。(エラー文は日本語にしてないけれど…)

ちなみにサイズに関しても上記のようにできる。