【Rails5】file_fieldの拡張子を指定・制限する方法

Rails5 の form_for メソッドを使ってファイルのアップロードフォームを作成する場合、拡張子の指定や制限を行いたい場合があると思います。

今回はそのような拡張子の指定・制限を行う際に必要な処理をメモしておきます。

file_field に accept 属性を追加する

htmlの属性に accept というものがあります。
これを用いることで、アップロードするファイルを選ぶ際の制限をすることができます。
(この方法では弱いのでのちに説明する方法と併用してください)

例えば、拡張子の .mp3 のみを受け付けたい場合は以下のように書きます。

<%= f.file_field :file ,accept:'audio/mp3' %>

accept 属性について参考にしたサイト:https://reference.hyper-text.org/html5/attribute/accept/

注意点として、オーディオファイルの .m4a を指定したい場合は、x-m4a とかく必要があります。

2. controller側で処理を書く!

上の方法だと、フォームからファイルを開いた時に制限はできるのですが、ファイルをドラッグされたり、スマホからだったりした時に対応できません。

なので、controller側で下のようなコードにより簡単な拡張子チェックを行います。

accepted_format = [".mp3"]
if !accepted_format.include? File.extname("ここにファイルネーム")
#指定した拡張子じゃない時の処理をここに書く
return
end

参考にしたサイト:https://codeday.me/jp/qa/20181216/51223.html