首页 > 解决方案 > 轨道控制器中空附件的 ActiveSupport::MessageVerifier::InvalidSignature

问题描述

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

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并发送一个空徽标参数,我收到一个错误:

Sponsors::MyController#update as JS 参数处理:{"utf8"=>"✓", "authenticity_token"=>"6hKH0vJIHgd6L2nFBSkpkqSLGXIvnuz95Wmq6I/jbT5NEBngxLY7yNUwF5d+jtN3ZyPFG8rJ/MJ2kXVrWf4SeQ==", "sponsor"=>" "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不直接跳过一个空的附件参数呢?

标签: ruby-on-railsrails-activestorage

解决方案


推荐阅读