Ответ 1
См. раздел Использование хостов ресурсов в документации. Вам нужно указать asset_host
. Вы также можете построить его динамически из цепочки запросов "#{request.protocol}#{request.host_with_port}"
Я использую Rails 3.1. Я пытаюсь понять это, и, к моему удивлению, начинает казаться, что рельсы не приходят с этим методом вообще. Возможно, ошибаюсь.
Может ли кто-нибудь показать, как я могу получить полный абсолютный URL-адрес изображения?
Я использую asset_path(image.png)
, который дает мне относительный путь для использования в приложении. Я попытался сделать root_url + asset_path(image.png)
, но это просто дает мне http://localhost:3000//assets/image.png
с двойными косыми чертами
У кого-нибудь есть эффективный способ сделать это?
См. раздел Использование хостов ресурсов в документации. Вам нужно указать asset_host
. Вы также можете построить его динамически из цепочки запросов "#{request.protocol}#{request.host_with_port}"
поместите это в application_helper.rb
def asset_url asset
"#{request.protocol}#{request.host_with_port}#{asset_path(asset)}"
end
то вы можете использовать asset_url
в своих представлениях.
Для Rails 4 и, возможно, раньше, используйте:
config.action_mailer.asset_host = 'https://assets.com'
В моем config/environments/*.rb
у меня уже есть это для каждой среды:
config.domain = 'mysite.dev'
Так что было просто добавить
config.action_controller.asset_host = "http://" + config.domain
для каждого файла. Тогда asset_path
будет чудесным образом вести себя так, как если бы он был asset_url
.
Пример структуры папок.
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") %>
Конечный результат:
Не могли бы вы просто сделать:
root_url[0..-2] + asset_path(image.png)
... обрезать конечную косую черту в корневом URL?
Вместо этого вы должны использовать asset_url '* путь к ресурсу *.
Bcz '_path' всегда возвращает относительный путь, а '_url' возвращает абсолютный url.