2013-03-18 3 views
0

Я использую Carrierwave и S3, чтобы люди могли загружать изображения, а URL-адрес изображения отображается как «https://myapp.s3.amazonaws.com/image/53/98ccfeca46.jpg».Можно ли отображать только часть URL-адреса изображения в рельсах?

Я хотел бы сделать одно из двух.

  1. Я хотел бы показать только «/image/53/98ccfeca46.jpg»

или 2. С помощью CNAME переименовать URL, чтобы не показывать «s3.amazonaws.com», так что URL изображения будет https://myapp.com/image/53/98ccfeca46.jpg

Как я могу это достичь? Можно ли разрезать URL-адрес изображения сразу после .com? Я использую <% = link_to xyz.image%> для отображения URL-адреса.

ответ

0

Вы можете создать вспомогательный метод для отображения URL-адреса и использовать строку sub для отсечения первой части URL-адреса.

Так что в вашей папке хелперов, в помощнике для соответствующей модели, вы можете иметь функцию, как

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 
0

Если вы используете carrierwave, вы можете вызвать .path, чтобы получить путь изображения. Я пробовал это на местном уровне, и он работал нормально, но я не уверен, что он будет работать на производстве. Попробуйте это:

<%= link_to xyz.image.path %> 

В качестве альтернативы, вы можете использовать CloudFront к серверу вы S3 файлы, что позволяет добавить кучу пользовательских синонимов для вашего дистрибутива, так что вы можете иметь assets.myapp.com/xyz.jpg

+0

спасибо, .path работает локально , Я проверю его в prod. – user2159586

+0

Отлично, дайте мне знать, если он работает на производстве. – johnkoht

Смежные вопросы