Подтвердить что ты не робот

Rails 3.1 абсолютный URL-адрес изображения

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

поместите это в application_helper.rb

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

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

Ответ 4

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

config.domain = 'mysite.dev'

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

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

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

Ответ 5

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

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

Ответ 6

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

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

... обрезать конечную косую черту в корневом URL?

Ответ 7

Вместо этого вы должны использовать asset_url '* путь к ресурсу *.

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