当我通过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但没有答案。
发生了什么事?谢谢。
答案 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 %>
当多次重新加载相同的表单时(即验证失败多次),这似乎对我有用。我认为他们不在文档中。