我使用paperclip将头像附加到我的用户身上,在我的模型中:
has_attached_file :avatar,
:styles => {square_tiny: '50x50#', square_small: '100x100#', square: '200x200#'}
我有一张表格
<%= form_for(@user_profile,
:url => { :controller => :user_profiles, :action => :update_general_info, :id => @user_profile.id },
:html => { :multipart => true,
:class=> "form-horizontal" }) do |f| %>
<div class="control-group">
<%= f.label :avatar, :class => "control-label" %>
<div class="controls">
<%= f.file_field :avatar %>
</div>
</div>
....
<% end %>
上传工作完美,但我回来编辑我的用户,文件字段显示'没有选择文件'。由于我正在验证该头像的存在,每次用户编辑他的详细信息时,他都必须再次上传他的头像...
我该如何解决这个问题?
我认为:multipart => true
会有所帮助,但事实并非如此。
答案 0 :(得分:5)
页面绝对没有办法将值设置为文件字段,这是出于安全原因。
如果浏览器允许页面或JS脚本将值设置为文件字段,该字段允许恶意页面使用某些系统或密码文件预设文件字段值。这将是一个巨大的安全漏洞。
在这种情况下我做的是将已保存的文件显示为用户可以单击下载的链接。然后,您可以提供少量AJAX链接进行删除(使用AJAX调用删除文件,并用新文件输入替换链接)并替换(链接替换为文件输入)。
您的最后一个选择是使用AJAX上传文件。如果您使用AJAX进行文件上传,则会将POST发送到隐藏帧,以便文件输入保持其选定值。 无论哪种方式,请记住,对文件字段值的任何更改都必须由用户启动。