rails 如何在动态图片资源的前面添加版本名称

How do I add a version name to the front of a dynamic image asset in rails

我有一个 rails 4 应用程序。我正在使用 Carrierwave 上传资产,它允许我保存调整大小的版本以及原始版本。如果我上传 'myimage.jpg' 它也会将 'xs_myimage.jpg' 保存到 AWS S3。问题是,xs 版本名称没有存储在任何地方,所以我不知道如何提供该图像。

这是我在视图中的图像调用:

<%=      image_tag (@portfolio.img) %>

一些我想如何称呼 xs_myimage.jp:

<%=      image_tag 'xs_'(@portfolio.img)%> #I know this doesn't work, its just what I've tried

尝试使用这个

<% 
  parts = @portfilio.img.split('/')
  parts[-1]="xs_#{parts.last}"
  img = parts.join('/')
%>

<%= image_tag img %>

但这是非常糟糕的解决方案。 如果 "xs" 是较小(较大)的图像尺寸,为什么不使用载波拇指?

Carrierwave 将为您声明的每个版本的资产自动生成一个 URL 助手。考虑一下:

class MyUploader < CarrierWave::Uploader::Base
  version :xs do
    # ...
  end
end

然后您可以使用生成的助手:

uploader = MyUploader.new # or get the instance out of your model (@portfolio.img)
uploader.xs.url

在 Carrierwave 上传器中

version :xs do
  process resize_to_limit: [50, 50]
end

然后在视图中

<%= image_tag(@portfolio.img.xs.url) %>