CarrierWave Gem未能正确更新

时间:2018-03-08 16:00:44

标签: ruby-on-rails ruby upload carrierwave

我试图在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

  • after_commit:remove_previously_stored_my_objects,on :: update(我希望复数版本可用) skip_callback:commit,:after,:remove_previously_stored_my_objects `

我已经在这个问题上工作了一个星期,很遗憾我找不到解决方案。如果我不能很快解决这个问题,我将不得不拔出carrierwave并手动完成所有工作。这显然不太理想。

参数:{&#34; utf8&#34; =&gt;&#34;✓&#34;,&#34; authenticity_token&#34; =&gt;&#34; AkIwXX8N29F3RWpd9OpmnPDpUTiCEKP3Z02 + a8 / zWBeZxuKR3gt uNjfwtJIhIyWCet7zBxAOq9WWjBr291SItw == &#34;,&#34; my_object&#34; =&gt; {&#34; name&#34; =&gt;&#34; test 123&#34;,&#34; discription&#34; =&gt;& #34;测试123&#34;,&#34; my_object_dt(1i)&#34; =&gt;&#34; 2018&#34;,&#34; my_object_dt(2i)&#34; =&gt;&# 34; 3&#34;,&#34; my_object_dt(3i)&#34; =&gt;&#34; 8&#34;,&#34;图像&#34; =&gt; -  [#<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

请帮忙!感谢。

0 个答案:

没有答案