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 }}
これでできあがり。(エラー文は日本語にしてないけれど…)
ちなみにサイズに関しても上記のようにできる。