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