CarrierWave 和嵌套表单 Gem 重新显示 :: HTML 文件输入图标

Posted

技术标签:

【中文标题】CarrierWave 和嵌套表单 Gem 重新显示 :: HTML 文件输入图标【英文标题】:CarrierWave and Nested Form Gem Redisplay :: HTML File Input Icon 【发布时间】:2012-05-14 15:43:49 【问题描述】:

我正在使用 CarrierWave 和嵌套表单 Gem。使用 Carrierwave github 页面(https://github.com/jnicklas/carrierwave)上标题为“使上传工作跨表单重新显示”的部分,我能够成功存储缓存,这样即使用户犯了错误,然后文件被保存。当我第一次点击该页面并单击“上传文件”时,它会工作并显示文件的名称以及指示已上传文件类型的小缩略图图标。

但是文件输入按钮在重新显示时是空白的,并且图标消失了。但是我知道它在那里,因为如果我再次提交有效信息并单独留下文件输入按钮,它会创建一个新资源。这是我的代码的 sn-p。

<%= 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 也可以正确显示,但对于我的应用程序让用户上传文本文件,所以图像不是很有帮助。

提前致谢!

更新 我还尝试像这样设置“输入”标签的值:

<%= attachment_form.file_field :file, :value => "#File.join(file_info[:folder], '/',attachment_form.object.file.identifier)" %>

这也没有用。 'input' 标签的值设置正确,但仍显示为“未选择文件”

【问题讨论】:

我也有同样的问题。你解决了吗? 抱歉……这是 3 年前的事了,该项目被管理层放弃了。 所以我不记得我是否能够解决这个问题,或者这是我正在解决的未决问题之一 【参考方案1】:

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

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

【讨论】:

以上是关于CarrierWave 和嵌套表单 Gem 重新显示 :: HTML 文件输入图标的主要内容,如果未能解决你的问题,请参考以下文章

嵌套表单 gem 和 jquery 的 Rails 问题

Gemfile 中的宝石顺序有影响吗?

rails4.2.8carrierwave+mini_magick+Jcrop,图片上传失败

在 Ruby on Rails 4.2 中使用 Cocoon gem 嵌套表单

如何通过 JSON API 通过 Carrierwave 上传文件?

rails wicked gem has_one 关联和嵌套形式