使用Rails缓存页面加载的图像上载 问题
让我们假设我们有一个表单来创建一个带有标题,正文和缩略图的BlogPost,我们验证所有属性都存在。像这样:
<% if @post.errors.any? %>
<div>
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
<ul>
<% @post.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div>
<%= f.label :title %>
<%= f.text_field :title %>
</div>
<div>
<%= f.label :body %>
<%= f.text_area :body %>
</div>
<div>
<%= f.label :thumbnail %>
<%= f.file_field :thumbnail %>
</div>
<div>
<%= f.submit %>
</div>
<% end %>
考虑以下事件序列: 用户填写正文字段,选择要上载的缩略图,然后提交表单。 表单再次呈现,因为标题丢失。 用户填写缺失的标题并重新提交表单。
哦,哦!验证失败,因为图像丢失了!用户现在必须再次找到他们想要上传的图像,这很烦人。我们希望避免让用户感到烦躁。
解决方案:图像缓存
CarrierWave具有很强的功能,可以在表单重新渲染中缓存上传的文件。
在文件字段下,我们添加:
<%= f.hidden_field :thumbnail_cache %>
请确保将thumbnail_cache添加到Rails 3中的attr_accessible或Rails 4中允许的参数。
我们还添加预览,以便用户可以看到当前附加的图像:
<%= image_tag(@post.thumbnail_url) if @post.thumbnail? %>
现在,如果用户提交缺少标题的表单,则他们的缩略图图像选择会保持不变。刺激避免。巨大的成功。
一切正常......
但如何将值添加到&lt;%= f.file_field:thumbnail%&gt;
我没有选择文件
我想要 thumbnail_cache - 文件名