编辑时Rails文件上传(回形针)

我自己制作了一个简单的rails blogging-type应用程序,我使用Paperclip上传图像文件。我的一切工作正常,花花公子。 我甚至把它连接到一个S3斗,等等…… Spiffy对吗?

但是在编辑/更新post时我无法理解该怎么做。 现在看来,我所拥有的就是我的表单模板上的这个字段:

= f.file_field :image 

因此,即使有先前附加的图像,也可以说“post / 5 / edit”,该字段显示“No file selected”。

更糟糕的是,如果我改变主意并且不想附加图像,则没有明显的方法来清除当前图像。

如何使这一点更加用户友好,并确保当前图像 – 文本/url很好 – 显示为文本字段中的值和/或用户可以将当前图像更改为无。

对于Rails3,这就是我的工作。 对不起,我还没有使用过Rails4。

要向用户显示他们是否已上传文件,请在您的视图中执行以下操作:

 <% if @blog.image.exists? %> <%= image_tag @blog.image.url(:thumb) %>
<% end %> <%= f.file_field :image %>

然后,为了允许用户删除当前上传,请将其添加到您的视图中(在if块内):

 <%= f.check_box :delete_image %>Delete Image

并且您在模型中处理该复选框:

  before_validation { image.clear if @delete_image } def delete_image @delete_image ||= false end def delete_image=(value) @delete_image = !value.to_i.zero? end 

这样,如果用户设置了复选框,它将在下次保存时清除图像。

上面的方法对我来说不适用于多个字段。

我使用javascript来做这个,因为我也使用cocoon动态添加多个图像,在编辑表单上我用自己的删除按钮显示所有图像。 然后我计算图像对象的数量并隐藏相同数量的图像文件上传框。 我目前已将它设置为多个,但只需稍加改动就可以适用于您的情况。 删除后,它们被重定向回到你的情况,计数将为0,它将显示上传框。

这是嵌套的表单部分

 

Upload Images

<% @rental.property_photos.each do |i| %>
<%= image_tag i.avatar.url(:thumb), class:"img-responsive property-images" %> <%= link_to i, method: :delete, data: { confirm: 'Are you sure?' } do %> <% end %>
<% end %>
<%= f.fields_for :property_photos do |p| %> <%= render 'property_photo_fields', :f => p %> <% end %>

我的嵌套表格

 
<%= f.file_field :avatar %>

我的javascript

 $(document).ready(function () { var count = $('.pic').length; function hideElements(x) { $('.picUploader').slice(0,x).hide(); } hideElements(count); }) 

用一点css你的结果然后看起来像这样…… 在此处输入图像描述