はじめに
ActiveStorageを利用したファイルアップロード時に特定のファイル形式のみ許可するため、バリデーション設定が必要になりました。
調べたところactivestorage-validatorというGemがありました。簡単にですが、利用した内容について纏めます。
実行環境
- rails 6.0.0
- ruby 2.5.6
実施内容
Gemをインストール
gem 'activestorage-validator'
モデルへバリデーション記述
class User < ApplicationRecord
has_one_attached :video
with_options presence: true do
validates :name
validates :video, blob: { content_type: ['audio/mpeg', 'audio/x-wav', 'audio/flac', 'audio/ogg', 'video/mp4', 'video/webm'] }
end
end
has_one_attached
でファイルとレコードの間に1対1のマッピングを設定、
content_type
で許可するファイル形式を指定します。
※今回はmp3,wav,flac,ogg,mp4,webm形式のファイルを許可
バリデーション確認
上記形式以外のファイルをアップロードするとバリデーションがかかり以下の通り、エラー出力されました。
Video is not a valid file format
まとめ
activestorage-validatorを利用して簡単にバリデーションの設定をすることができました。今回はファイル形式のみ設定を行いましたが、ファイルサイズのバリデーションが設定できる様です。用途に応じて利用したいと思います。
参考