10

当我通过 Carrierwave 提交图像时,如果缺少一个字段(即标题),则会出现缓存的图像...

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

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

问题与此类似。CarrierWave 在重新显示表单后未保存上传,但没有答案。

怎么了?谢谢你。

4

4 回答 4

5

对我来说,问题是我有

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

所以我拒绝了该文件,因为该文件不存在

需要注意的是,文件本身不会持久化,而只是文件缓存。这就是为什么carrierwave docs建议:

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

于 2015-03-09T16:10:20.523 回答
3

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

于 2015-02-05T15:27:21.800 回答
0

对于 Rails 5+,carrierwave 文档已经过时。现在强参数是 Rails 的一部分,您必须avatar_cache在控制器中加入白名单。例如:

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

还要确保你没有模型attr_accessor :avatar_cache(这是我的问题)

于 2020-09-24T14:44:41.423 回答
-1

尝试填充 avatar_cache 的值,以便在验证失败时将其预先填充到表单中:

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

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

于 2013-05-15T03:26:21.730 回答