CarrierWave和嵌套表单Gem Redisplay :: HTML文件输入图标

时间:2012-05-05 07:53:56

标签: ruby-on-rails nested-forms carrierwave html-input

我正在使用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”标记的值已正确设置,但仍显示为“未选择文件”

1 个答案:

答案 0 :(得分:0)

CarrierWave的介绍并没有说明这一点,但听起来你的代码运行正常。缓存字段仅用于确保在有效提交后保存附件。

This document解释说文件输入元素的FileList应该是只读的,大概是出于安全考虑。