我试图在rails 5中使用Carrierwave,并且在更新时使用阵列文件上传没有太多运气。
我有一个包含多个字段和文件选择按钮的表单。我可以毫无困难地创建和保存初始对象。当我尝试使用@ my_object.update_attributes(my_object_params)等进行更新时,会出现问题。
如果我在更新表单时尝试添加其他文件,我的初始文件将被新文件覆盖。即使我事先做了这样的事情:
original_images = @my_object.find(params[:id]).images
new_images = params[:my_object][:images]
@my_object.images = original_images + new_images
做一个" put"这里显示了新添加的文件,以及原始文件位于@my_object。
调用@ my_object.save只允许保存文件并且不会更新表单字段。所以使用它并不是一个可行的选择。 如果我调用@ my_object.update_attributes(my_object_params)或@ my_object.update(my_object_params)。表单字段已更新,但数组中的文件仅使用新更新的文件完全重写。这对我来说很奇怪,因为我用@my_object更新了原始文件和新文件中的文件数组。
显然,没有任何回调方法可以防止这种行为,如README文件中所述。我只是在尝试使用回调时遇到错误,说明尚未定义回调方法。
即: ` - after_commit:remove_previously_stored_my_object,on :: update。 (奇异版本显然不会存在) skip_callback:commit,:after,:remove_previously_stored_my_object
我已经在这个问题上工作了一个星期,很遗憾我找不到解决方案。如果我不能很快解决这个问题,我将不得不拔出carrierwave并手动完成所有工作。这显然不太理想。
参数:{" utf8" =>"✓"," authenticity_token" =>" AkIwXX8N29F3RWpd9OpmnPDpUTiCEKP3Z02 + a8 / zWBeZxuKR3gt uNjfwtJIhIyWCet7zBxAOq9WWjBr291SItw == "," my_object" => {" name" =>" test 123"," discription" =>& #34;测试123"," my_object_dt(1i)" =>" 2018"," my_object_dt(2i)" =>&# 34; 3"," my_object_dt(3i)" =>" 8","图像" => -
[#<ActionDispatch::Http::UploadedFile:0x007ffc2b1eb340 @tempfile=#<Tempfile:/var/folders/lx/zh78w2d93bq 1s_s5v4z_6r0h0000gn/T/RackMultipart20180308-30502-1c1f20r.pdf>, @original_filename="add_file3.pdf", @co ntent_type="application/pdf", @headers="Content-Disposition: form-data; name=\"my_object[images][]\"; filename=\"add_file3.pdf\"\r\nContent-Type: application/pdf\r\n">, etc. etc. etc.
我只是遵循CarrierWave README示例,并且完全按照多个头像显示的内容。不幸的是,更新会覆盖文件,并且回调方法也不存在。不幸的是,他们没有提供如何进行更新的示例。
https://github.com/carrierwaveuploader/carrierwave
Multiple Avatars ActiveRecord Example
请帮忙!感谢。