我正在使用Rails 3.1。我试图解决这个问题,令我惊讶的是,似乎轨道根本就没有这种方法。也许我错了。
有人能说明我如何获得图像的完整绝对URL吗?
我使用asset_path(image.png)
,它为我提供了在应用中使用的相对路径。我尝试了root_url + asset_path(image.png)
,但只给了我一个带有双斜杠的http://localhost:3000//assets/image.png
任何人都有这样做的有效方法吗?
答案 0 :(得分:24)
请参阅documentation中的使用资源主机部分。您需要指定asset_host
。您还可以从请求链"#{request.protocol}#{request.host_with_port}"
答案 1 :(得分:24)
将其放在application_helper.rb
def asset_url asset
"#{request.protocol}#{request.host_with_port}#{asset_path(asset)}"
end
然后您可以在视图中使用asset_url
。
答案 2 :(得分:11)
对于Rails 4,也许更早,请使用:
config.action_mailer.asset_host = 'https://assets.com'
答案 3 :(得分:6)
在我的config/environments/*.rb
我已经为每个环境量身定制了这个:
config.domain = 'mysite.dev'
所以添加
就是一件简单的事情config.action_controller.asset_host = "http://" + config.domain
到每个文件。然后,asset_path
奇迹般地表现得像asset_url
一样。
答案 4 :(得分:0)
示例文件夹结构。
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
进入我们的apps / view / products.html.erb。我们必须只打电话:
<% flag_path = generate_flag_path_by_locale("en") %>
最终结果:
答案 5 :(得分:-1)
你能做到:
root_url[0..-2] + asset_path(image.png)
...修剪根网址中的尾部斜杠?
答案 6 :(得分:-10)
您需要使用' asset_url '代替* asset_path *。
Bcz'_path'总是返回相对路径,'_ url'将返回绝对URL。