我正在使用CarrierWave和Nested Form Gem。使用Carrierwave github页面(https://github.com/jnicklas/carrierwave)上标题为“使上传工作跨表单重新显示”的部分,我能够成功存储缓存,这样即使用户犯了错误,文件已保存。我第一次点击页面并单击“上传文件”它会工作,并显示文件的名称以及一个小缩略图图标,表示已上传的文件类型。
然而,重新显示时文件输入按钮为空白,图标消失。但是我知道它存在,因为如果我再次提交有效信息并单独保留文件输入按钮,则会创建一个新资源。这是我的代码片段。
<%= nested_form_for @resource, :html=>{:multipart => true } do |f| %>
<p>
<%= f.label :title %><br />
<%= f.text_field :title %>
</p>
<%= f.fields_for :attachments do |attachment_form| %>
<p>
<%= attachment_form.label :file %>
<% if !attachment_form.object.file.path.blank? %>
<% file_info = get_cache_file_info attachment_form.object.file.path %>
<%= image_tag(File.join('/tmp/cache/', file_info[:folder])) #THIS DISPLAY CORRECTLY %>
<% end %>
<%= attachment_form.file_field :file %>
<%= attachment_form.hidden_field :file_cache %>
</p>
<%= attachment_form.link_to_remove "Remove this attachment" %>
<% end %>
<%= f.link_to_add "Add attachment", :attachments %>
<p><%= f.submit %></p>
<% end %>
我想知道是否必须编辑HTML文件输入以显示图标,或者是否有其他一些Rails方法来处理这个问题。 image_tag也正确显示,但对于我的应用程序,用户上传文本文件,因此图像不是很有帮助。
提前致谢!
更新的 我也尝试设置'input'标签的值,如下所示:
<%= attachment_form.file_field :file, :value => "#{File.join(file_info[:folder], '/',attachment_form.object.file.identifier)}" %>
这也不起作用。 “input”标记的值已正确设置,但仍显示为“未选择文件”
答案 0 :(得分:0)
CarrierWave的介绍并没有说明这一点,但听起来你的代码运行正常。缓存字段仅用于确保在有效提交后保存附件。
This document解释说文件输入元素的FileList应该是只读的,大概是出于安全考虑。