ActiveSupport :: MessageVerifier :: InvalidSignature для пустого вложения в контроллере rails - PullRequest
0 голосов
/ 07 мая 2019

Я только что установил 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 не пропустить пустой параметр вложения из коробки?

...