如何显示Carrierwave缓存的缩略图

时间:2013-08-03 13:44:20

标签: ruby-on-rails carrierwave

我使用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)

错误

2 个答案:

答案 0 :(得分:5)

好的,终于明白了。

  1. 即使出现验证错误,Carrierwave也会缓存上传内容。毕竟,这就是缓存的用途。它使用户无需重新上载文件。

  2. gem(我,程序员)的用户不必担心如何访问缓存。只需在表单和attr_accessible中包含缓存字段,然后像正常一样访问图像(或任何文件)。 Carrierwave将透明地完成其余工作。所以在我的情况下

    %td= image_tag post.image.url :thumb
    
  3. 将从商店目录或缓存中正确显示图像。

    Carrierwave on GitHub

答案 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),因为版本在收到验证错误时永远不会缓存

如果我错了,请纠正我:)

希望这个帮助