引き続き、ActiveStorageネタです。 simple_formを使ってActiveStorageのdirect_uploadの設定を書くと、うまくいきません…。
= simple_form_for(@post) do |f| / 略 .form-inputs / 動くけれどダイレクトアップロードにはならない… = f.input :images, as: :file, direct_upload: true, input_html: { multiple: true, accept: 'image/*' }
どうもdirect_upload: true
の部分が関係ないものとして無視されてしまうようです。
しかしもう既にActiveStorageが出てから随分経っているので、なんかいい方法あるだろうとググったら、stack overflowにありました。
simple_formのカスタムインプットクラスを作る方法です。app/inputs/direct_upload_file_input.rb
を作って、以下のコードを貼ります。
# frozen_string_literal: true class DirectUploadFileInput < SimpleForm::Inputs::FileInput def input_html_options super.merge({ direct_upload: true }) end end
そして、ビューを修正します。
= simple_form_for(@post) do |f| / 略 .form-inputs / ダイレクトアップロードになった! = f.input :images, as: :direct_upload_file, input_html: { multiple: true, accept: 'image/*' }
エラーメッセージも綺麗に出るようになったので、こっちのほうがいいですね。