Я только что установил ActiveStorage
в моем приложении Rails 5.2.3.Я использую классические действия CRUD для загрузки вложения, которое отлично работает, когда изображение выбрано через мою форму:
Обработка Sponsors :: MyController # update как JS Параметры: {"utf8" => "✓ " "authenticity_token"=> "6hKH0vJIHgd6L2nFBSkpkqSLGXIvnuz95Wmq6I / jbT5NEBngxLY7yNUwF5d + jtN3ZyPFG8rJ / MJ2kXVrWf4SeQ ==", "спонсор"=> { "имя"=> "Джон", "фамилия"=> "", "имя Doe"=>"Что-то "," logo "=> #, @ original_filename =" Снимок экрана 2019-05-06 в 10.25.28.png ", @ content_type =" image / png ", @ headers =" Content-Disposition: form-data; name= \ "спонсор [логотип] \"; имя файла = \ "Снимок экрана 2019-05-06 в 10.25.28.png \" \ r \ nContent-Type: image / png \ r \ n ">}," remotipart_submitted "=> "true", "X-Requested-With" => "IFrame", "X-HTTP-Accept" => "text / javascript, application / javascript, application / ecmascript, application / x-ecmascript, /; q = 0,01 "," id "=>" 1348 "}
параметр изображения установлен правильно.Мой контроллер обрабатывает изображение, как описано в ActiveStorage Docs :
@my_object.logo.attach(my_params[:logo])
Однако, когда я обновляю другой атрибут в форме, например firstname
, и отправляю пустой параметр логотипа,Я получаю сообщение об ошибке:
Обработка спонсорами :: MyController # обновляется как JS-параметры: {"utf8" => "✓", "authenticity_token" => "6hKH0vJIHgd6L2nFBSkpkqSLGXIvnuz95Wmq7yWFF = M6FFFFXFXFXFXFXFXFXFXFFXXFXXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXXFX5F5BFFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXF0jpF= "," sponsor "=> {" firstname "=>" John "," lastname "=>" Doe "," name "=>" Something "," logo "=>" "...
=>
ActiveSupport::MessageVerifier::InvalidSignature (ActiveSupport::MessageVerifier::InvalidSignature)
Это неудовлетворительно.Даже paperclip
знает, как обращаться с этими пустыми параметрами.Я также не совсем понимаю, почему это происходит.
Возможное решение состоит только в том, чтобы отфильтровать параметр, если он пуст, но это взрывает мой код:
if my_params[:logo].present?
@my_object.logo.attach(my_params[:logo])
else
my_params.delete :logo
end
работает.
Есть ли лучшее решение для этого?Почему бы ActiveStorage
не пропустить пустой параметр вложения из коробки?