使用Rails缓存跨页面加载的图像上载

时间:2016-06-29 09:13:51

标签: ruby-on-rails

使用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 %>

考虑以下事件序列: 用户填写正文字段,选择要上载的缩略图,然后提交表单。 表单再次呈现,因为标题丢失。 用户填写缺失的标题并重新提交表单。 enter image description here

哦,哦!验证失败,因为图像丢失了!

用户现在必须再次找到他们想要上传的图像,这很烦人。我们希望避免让用户感到烦躁。

解决方案:图像缓存

CarrierWave具有很强的功能,可以在表单重新渲染中缓存上传的文件。

在文件字段下,我们添加:

<%= f.hidden_field :thumbnail_cache %>

请确保将thumbnail_cache添加到Rails 3中的attr_accessible或Rails 4中允许的参数。

我们还添加预览,以便用户可以看到当前附加的图像:

<%= image_tag(@post.thumbnail_url) if @post.thumbnail? %>

现在,如果用户提交缺少标题的表单,则他们的缩略图图像选择会保持不变。刺激避免。巨大的成功。 enter image description here

一切正常......

但如何将值添加到&lt;%= f.file_field:thumbnail%&gt;

没有选择文件

我想要 thumbnail_cache - 文件名

0 个答案:

没有答案