はじめに
Ruby on Railsにおいて、ActiveStrageは画像投稿機能を実装する際、
とてもシンプルで使いやすく、重宝しています。
ただ、バリデーションの設定がデフォルトでできないようです。
どうにかしてバリデーションの設定ができないか調べてみると、
オリジナルでファイルを作成している方々がたくさんいらっしゃり、
尊敬と憧れを抱きつつも、ズボラな自分はもっと簡単に設定する方法ないの?
と探してたどり着いた方法です。
それはactivestorage-validator
というgem
を導入する方法です。
個人的に、普通にモデルに設定するバリデーションとほぼ同じやり方で設定できる点が使いやすいなと感じ、他の初学者の方にもオススメできると思い記事にした次第です。
導入から使い方を下記にまとめて見ました。
(今回はRails 6.0
、MySQL
を使用しています。)
導入方法
まず、Gemfile
に下記を記述します。
gem 'activestorage-validator'
コンソールで
% bundle install
これで導入は完了です。
使い方
ファイル添付必須
入力フォームでファイルの添付を必須にしたい時の記述方法です。
'activestorage-validator'では、presence: true
で指定できます。
配置例
class User < ApplicationRecord
has_one_attached :avatar
validates :avatar, presence: true, blob: { content_type: :image }
end
-
blob:
と記述するのは、ActiveStorageはBlob
とAttachment
モデルを使うからです。 -
content_type:
で添付ファイルの型を指定します。今回の例では画像なので、:image
となります。
(オプションは:image
の他に、:audio
、:video
、:text
を指定可能です。)
拡張子など、もっと細かく指定したい場合
配置例
class User < ApplicationRecord
has_many_attached :photos
validates :photos, presence: true, blob: { content_type: ['image/png', 'image/jpg', 'image/jpeg'], size_range: 1..5.megabytes }
end
- 拡張子を細かく指定したい場合は
content_type:
で上記のように記述すれば、より細かく指定できます。 - 保存できるファイルの容量を指定したい場合は、
size_range:
で指定します。上記だと1〜5MBのファイルのみ保存可能にしています。
終わりに
以上で現時点で私が理解している機能についての説明を終わります。
まだ試していませんが、message:
を使えば表示されるエラー文の指定もできるのではないかと考えたり、まだまだ細かいバリデーションを設定できる可能はあります。
active_strage_validations
というgem
も似た感じでバリデーションの設定ができるようですが、
なんとなく'activestorage-validator'の方が直感的にわかりやすかったので、個人的にはこちらを使用させていただいております。
もっと詳しく知りたい方は下記参考文献よりご確認ください。
初学者ですので、理解不足な部分があると思いますが、間違いなどあれば
ご指摘していただけると幸いです。