我使用Carrierwave允许用户将图像附加到他们的帖子。在帖子列表中,我显示缩略图(以haml为单位),如下所示:
%td= image_tag post.image.url :thumb
如果在创建新帖子时验证失败,我会像这样显示缓存:
= image_tag "/#{ImageUploader::cache_dir}/#{post.image_cache}"
我无法弄清楚如何显示缓存的缩略图。检查文件系统确认它与缓存的映像位于同一目录中。我试过了
= image_tag post.image_cache :thumb
但是wrong number of arguments (1 for 0)
答案 0 :(得分:5)
好的,终于明白了。
即使出现验证错误,Carrierwave也会缓存上传内容。毕竟,这就是缓存的用途。它使用户无需重新上载文件。
gem(我,程序员)的用户不必担心如何访问缓存。只需在表单和attr_accessible中包含缓存字段,然后像正常一样访问图像(或任何文件)。 Carrierwave将透明地完成其余工作。所以在我的情况下
%td= image_tag post.image.url :thumb
将从商店目录或缓存中正确显示图像。
答案 1 :(得分:1)
如果出现validation
错误,AFAIK Carrierwave不会缓存版本
如果我纠正了Carrierwave缓存版本并在after
回调钩子中处理它并
验证检查在before
回调挂钩中执行。
你可以这样的东西
before_callback :check_for_validation
// do some logic
after_callback :cache_the_version and process it
之前回调中的任何错误都会导致Carrierwave绕过后一个回调链
因此您没有在失败的验证错误时缓存版本。 (我认为这是预期的行为,因为如果它们不是有效,就会考虑处理和创建版本的原因)
wrong number of arguments (1 for 0)
这也是预期的行为,因为#{column}_cache
在你的情况下image_cache
方法不会带任何参数
我认为没有任何方法可以显示版本的缓存图像(在您的情况下为thumb
),因为版本在收到验证错误时永远不会缓存
如果我错了,请纠正我:)
希望这个帮助