Rails 3.1图像的绝对URL

时间:2011-09-29 12:11:33

标签: ruby-on-rails ruby ruby-on-rails-3.1 asset-pipeline

我正在使用Rails 3.1。我试图解决这个问题,令我惊讶的是,似乎轨道根本就没有这种方法。也许我错了。

有人能说明我如何获得图像的完整绝对URL吗?

我使用asset_path(image.png),它为我提供了在应用中使用的相对路径。我尝试了root_url + asset_path(image.png),但只给了我一个带有双斜杠的http://localhost:3000//assets/image.png

任何人都有这样做的有效方法吗?

7 个答案:

答案 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'

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

答案 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") %> 

最终结果:

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

答案 5 :(得分:-1)

你能做到:

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

...修剪根网址中的尾部斜杠?

答案 6 :(得分:-10)

您需要使用' asset_url '代替* asset_path *。

Bcz'_path'总是返回相对路径,'_ url'将返回绝对URL。