carrierwave缓存未重新提交

时间:2013-05-08 01:12:31

标签: ruby-on-rails ruby-on-rails-3 carrierwave

当我通过Carrierwave提交图像并且缺少一个字段(即标题)时,将显示缓存的图像...

      <% if @post.avatar? %>
          <%= image_tag @post.avatar_url, :style => "width:300px"  %> 
          <%= f.hidden_field :avatar_cache %>
          <%= @post.avatar_url %>
      <% end %>

但是,:avatar_cache字段为空。当我重新提交表单时,没有任何图像属性向前移动,所以我必须重新选择图像。

问题类似于此。 CarrierWave not saving upload after form redisplay但没有答案。

发生了什么事?谢谢。

4 个答案:

答案 0 :(得分:5)

对我来说,问题是我有

accepts_nested_attributes_for :avatars, allow_destroy: true, reject_if: lambda { |avatar| avatar[:file].blank? }

所以我拒绝了该文件,因为文件没有

请务必注意,文件本身不会保留,只会保留文件缓存。这就是载波docs建议:

的原因

向用户显示已上传文件可能是一个好主意,对于图片,小缩略图将是一个很好的指标:

答案 1 :(得分:2)

检查您的模型中是否有attr_accessor avatar_cache声明。我偶然添加了它而不是attr_accessible(如他们的文档中所述),它覆盖了CarrierWave生成的方法。

答案 2 :(得分:0)

Rails 5+的载波文档已过时。现在,强参数已成为Rails的一部分,您必须在控制器中将avatar_cache列入白名单。例如:

params.require(:user).permit(:name, :avatar, :avatar_cache)

还要确保您不要在模型中使用attr_accessor :avatar_cache(这是我的问题)

答案 3 :(得分:-1)

尝试填充avatar_cache的值,以便在验证失败时,它将以下列形式预先填充:

<%= f.hidden_field :avatar_cache, :value => @post.avatar_cache %>

当多次重新加载相同的表单时(即验证失败多次),这似乎对我有用。我认为他们不在文档中。