是否可以在rails中仅显示图像URL的一部分?

时间:2013-03-18 04:46:23

标签: ruby-on-rails ruby-on-rails-3 amazon-s3 carrierwave

我使用Carrierwave和S3允许人们上传图片,图片网址显示为“https://myapp.s3.amazonaws.com/image/53/98ccfeca46.jpg”。

我想做两件事之一。

  1. 我想表现出来 “/image/53/98ccfeca46.jpg”
  2. 或2.使用CName重命名URL以不显示“s3.amazonaws.com”,以便图像URL将是 https://myapp.com/image/53/98ccfeca46.jpg

    我怎样才能实现这些目标?是否可以在.com之后立即剪切图像URL? 我正在使用<%= link_to xyz.image%>显示URL。

2 个答案:

答案 0 :(得分:0)

您可以创建一个帮助方法来显示网址,并使用字符串sub来切断网址的第一部分。

因此,在helpers文件夹中,在相应模型的帮助器中,您可能具有类似

的函数
def show_url(url)
  return url.sub("https://myapp.s3.amazonaws.com", "")
end

然后在你的助手中你会<%= link_to show_url(xyz.image) %>

或者确实类似,但使用正则表达式

def show_url(url)
  return url.match(/.com(.+)/)[1]
end

答案 1 :(得分:0)

如果您使用的是carrierwave,则可以调用.path来检索图像的路径。我在本地试过这个并且工作正常,但我不确定它是否适用于生产。试试这个:

<%= link_to xyz.image.path %>

或者,您可以使用CloudFront为S3文件提供服务,这样您就可以向分发中添加一堆自定义CNAME,这样您就可以拥有assets.myapp.com/xyz.jpg