Rails 3.1 абсолютный URL к изображению - PullRequest
31 голосов
/ 29 сентября 2011

Я использую Rails 3.1.Я пытаюсь понять это, и, к моему удивлению, начинает казаться, что рельсы вообще не идут с этим методом.Может быть, я неправ.

Может кто-нибудь показать, как я могу получить полный абсолютный URL-адрес изображения?

Я использую asset_path(image.png), который дает мне относительный путь для использования в приложении.Я попытался сделать root_url + asset_path(image.png), но это просто дает мне http://localhost:3000//assets/image.png с двойной косой чертой

У кого-нибудь есть эффективный способ сделать это?

Ответы [ 7 ]

24 голосов
/ 17 ноября 2011

положить это в application_helper.rb

def asset_url asset
  "#{request.protocol}#{request.host_with_port}#{asset_path(asset)}"
end

тогда вы можете использовать asset_url в своих представлениях.

24 голосов
/ 29 сентября 2011

См. Использование хостов активов в документации .Вам нужно указать asset_host.Вы также можете построить его динамически из цепочки запросов "#{request.protocol}#{request.host_with_port}"

11 голосов
/ 03 июля 2014

Для Rails 4, а может и раньше, используйте:

config.action_mailer.asset_host = 'https://assets.com'

за https://github.com/fphilipe/premailer-rails/issues/16

6 голосов
/ 01 мая 2012

В моем config/environments/*.rb я уже настроил это для каждой среды:

config.domain = 'mysite.dev'

Так что было просто добавить

config.action_controller.asset_host = "http://" + config.domain

к каждому файлу.Тогда asset_path будет чудесным образом вести себя так, как если бы это было asset_url.

0 голосов
/ 04 марта 2016

Не могли бы вы просто:

root_url[0..-2] + asset_path(image.png)

... обрезать завершающий слеш в корневом URL-адресе?

0 голосов
/ 24 апреля 2014

Пример структуры папок.

app/
   assets/
      flags/
         32x32/
            en.png
         256x256/
            en.png

Если вы хотите сгенерировать абсолютный путь к изображению флага, мы можем добавить в наш ApplicationHelper два метода:

module ApplicationHelper

  # Generate flag path by locale
  # - locale. Can be "en", "it", etc.
  # - flag_size. Will be used to set folder size. Folder size can be "32x32", "256x256".
  # Return flag image path. Path will absolute
  def generate_flag_path_by_locale(locale, folder_size = "32")
    folder = "#{flag_size}x#{flag_size}"
    domain_absolute_path = generate_domain_absolute_path
    flag_path = ("#{domain_absolute_path}/assets/flags/#{folder}/#{locale}.png")

    return flag_path
  end

  # Generate domain absolute path
  def generate_domain_absolute_path
    request_protocol = request.protocol
    request_host_with_port = request.host_with_port
    domain_absolute_path = request_protocol + request_host_with_port

    return domain_absolute_path
  end
end

В наши приложения / view / products.html.erb. Мы должны звонить только:

<% flag_path = generate_flag_path_by_locale("en") %> 

Окончательный результат:

http://my_domain.com:3000/assets/flags/32x32/en.png

0 голосов
/ 29 сентября 2011

Вам нужно использовать ' asset_url ' вместо * asset_path *.

Bcz '_path' всегда возвращает относительный путь, а '_url' возвращает абсолютный URL.

...