编辑时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 %> <%= link_to_add_association 'Add Image', f, :property_photos, class:"fa fa-plus margin-bottom-20" %>
我的嵌套表格
<%= f.file_field :avatar %>
我的javascript
$(document).ready(function () { var count = $('.pic').length; function hideElements(x) { $('.picUploader').slice(0,x).hide(); } hideElements(count); })
用一点css你的结果然后看起来像这样……