ActiveSupport :: MessageVerifier :: InvalidSignature用于Rails控制器中的空附件

时间:2019-05-07 06:53:50

标签: ruby-on-rails rails-activestorage

我刚在我的Rails 5.2.3应用程序中安装了ActiveStorage。 我正在使用经典的CRUD操作上传附件,当通过我的表单选择图片时,附件可以正常工作

  

由Sponsors :: MyController#update作为JS参数进行处理:   {“ utf8” =>“✓”,   “ authenticity_token” =>“ 6hKH0vJIHgd6L2nFBSkpkqSLGXIvnuz95Wmq6I / jbT5NEBngxLY7yNUwF5d + jtN3ZyPFG8rJ / MJ2kXVrWf4SeQ ==”,   “ sponsor” => {“ firstname” =>“ John”,“ lastname” =>“ Doe”,   “名称” =>“某事”,   “ logo” =>#,   @ original_filename =“屏幕截图2019-05-06 at 10.25.28.png”,   @ content_type =“ image / png”,@ headers =“ Content-Disposition:form-data;   name = \“ sponsor [logo] \”; filename =“ \”截屏日期为2019-05-06   10.25.28.png \“ \ r \ n内容类型:image / png \ r \ n”>},“ remotipart_submitted” =>“ true”,“ X-Requested-With” =>“ IFrame”,   “ X-HTTP-Accept” =>“文本/ javascript,应用程序/ javascript,   application / ecmascript,application / x-ecmascript, / ; q = 0.01“,   “ id” =>“ 1348”}

图像参数设置正确。我的控制器按照ActiveStorage Docs中所述处理图像:

@my_object.logo.attach(my_params[:logo])

但是,当我更新表单中的其他属性时,例如firstname并发送一个空的徽标参数,我收到一个错误:

  

由Sponsors :: MyController#update作为JS参数进行处理:   {“ utf8” =>“✓”,   “ authenticity_token” =>“ 6hKH0vJIHgd6L2nFBSkpkqSLGXIvnuz95Wmq6I / jbT5NEBngxLY7yNUwF5d + jtN3ZyPFG8rJ / MJ2kXVrWf4SeQ ==”,   “ sponsor” => {“ firstname” =>“ John”,“ lastname” =>“ Doe”,   “名称” =>“某些东西”,“徽标” =>“” ...

=>

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不只是跳出一个空的附件参数?

0 个答案:

没有答案