Rails - 如何在css.erb中获取资产的绝对URL

时间:2013-01-04 06:57:50

标签: css ruby-on-rails-3

我想在我的css中获取图像的绝对URL,如下所示:

"#{request.scheme}://#{request.host_with_port}/assets/image.png);"

但我认为无法在css.erb中访问请求属性。任何人都可以告诉我如何在我的CSS中获得请求方案和host_with_port属性?

2 个答案:

答案 0 :(得分:1)

您可以通过在应用程序配置中定义asset_host来定义“scheme”(更正确:协议),主机和端口,但此定义将用于所有资产路径。

请参阅有关Asset Tag Helpers请求信息的Rails API文档:

ActionController::Base.asset_host = Proc.new { |source, request|
      "#{request.protocol}#{request.host_with_port}"
}

如果您需要不同类型资产的不同值,您可以定义过滤条件,例如:

ActionController::Base.asset_host = Proc.new { |source|
 if source.starts_with?('/images')
   "http://images.example.com"
 else
   "http://assets.example.com"
 end
}

答案 1 :(得分:0)

您可以为任何背景图片或其他资源定义带绝对网址的css。因此,您可以按照How to get absolute image paths in your css files using sass/scss动态生成它。

<强> CSS

body {
  background-image: image-url(background.png);
}

在您的环境文件中使用您的文件进行更改

config.action_controller.asset_host = "http://your.domain.com/"

然后你的CSS会看起来像那样:

body {
  background-image: url(http://your.domain.com/assets/background.png);
}