我自己制作了一个简单的rails blogging-type应用程序,我使用Paperclip上传图像文件。我的一切工作正常,花花公子。我甚至把它连接到一个S3斗,等等.Smiffy对吗?
但是在编辑/更新帖子时我无法想象该怎么做。按照现在的情况,我所拥有的只是表单模板上的这个字段:
= f.file_field :image
所以,即使有先前附加的图像,也可以说“post / 5 / edit”,该字段显示“未选择文件”。
更糟糕的是,如果我改变主意并且不想附加图像,则没有明显的方法来清除当前图像。
如何使这一点更加用户友好并确保当前图像 - 文本/网址正常 - 显示为文本字段中的值和/或用户可以将当前图像更改为无
答案 0 :(得分:22)
对于Rails3,这就是我的工作。对不起,我还没有使用过Rails4。
要向用户显示他们是否已上传文件,请在您的视图中执行以下操作:
<% if @blog.image.exists? %>
<%= image_tag @blog.image.url(:thumb) %><br/>
<% end %>
<%= f.file_field :image %>
然后,为了允许用户删除当前上传,请将其添加到您的视图中(在if块内):
<%= f.check_box :delete_image %>Delete Image<br/>
您在模型中处理该复选框:
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
这样,如果用户设置了复选框,它将在下次保存时清除图像。
答案 1 :(得分:0)
上述方法对我来说并不适用于多个领域。
我使用javascript来执行此操作,因为我还使用cocoon动态添加多个图像,在编辑表单上我使用自己的删除按钮显示所有图像。然后我计算图像对象的数量并隐藏相同数量的图像文件上传框。我目前将它设置为多个,但只需稍加改动就可以适用于您的情况。删除后,它们被重定向回到你的情况,计数将为0,它将显示上传框。
这是嵌套表单部分
<h3 class="text-muted">Upload Images</h3>
<% @rental.property_photos.each do |i| %>
<div class="pic">
<%= image_tag i.avatar.url(:thumb), class:"img-responsive property-images" %>
<%= link_to i, method: :delete, data: { confirm: 'Are you sure?' } do %>
<i class="fa fa-times-circle delete-pic"></i>
<% end %>
</div>
<% end %>
<fieldset id="property_photos">
<%= f.fields_for :property_photos do |p| %>
<%= render 'property_photo_fields', :f => p %>
<% end %>
</fieldset>
<div class="links">
<%= link_to_add_association 'Add Image', f, :property_photos, class:"fa fa-plus margin-bottom-20" %>
</div>
我的嵌套表格
<div class="nested_fields">
<div class="col-md-3 picUploader">
<%= f.file_field :avatar %>
</div>
</div>
我的javascript
$(document).ready(function () {
var count = $('.pic').length;
function hideElements(x) {
$('.picUploader').slice(0,x).hide();
}
hideElements(count);
})