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

Как получить абсолютный URL-адрес для актива в Rails 3.1?

image_path возвращает только путь (без хоста).

Помощник url_for не примет ни одного пути, поэтому что-то вроде url_for(image_path('image.png')) не будет работать. Хотя внутренний url_for в ActionDispatch::Http::Url.url_for, как представляется, выполняет трюк (source), похоже, нет открытого интерфейса для он.

Как мне это сделать? В конечном итоге было бы неплохо иметь такую ​​функцию, как image_url, которая работает как url_for для маршрутов, так что я мог бы вызвать image_url('image.png') и получить абсолютный URL-адрес, заданный всем default_url_options.

4b9b3361

Ответ 1

Похоже, что в последнее время sass-rails теперь интерпретирует команду image_url в файле scss ожидаемым образом, разрешая конечное местоположение соответствующего изображения.

Ответ 2

def image_url(source)
  URI.join(root_url, image_path(source))
end

Таким образом вы получаете URL-адрес либо с помощью assets_host, либо с помощью root_url.

Ответ 3

Попробуйте это в application_helper.rb (из одного из комментариев на странице Spike):

def image_url(source)
  "#{root_url}#{image_path(source)}"
end

Ответ 4

Наши производственные и промежуточные активы находятся на s3/cloudfront... но не локально /dev. Поэтому я написал это (может быть, излишне, и, вероятно, можно упростить):

  def get_digest_file(source)
     return asset_path(source.to_s.downcase) unless Rails.application.config.assets.digests.present?
     return ActionController::Base.asset_host + "/assets/" + Rails.application.config.assets.digests[source.to_s.downcase]
  end

Ответ 6

Вы можете определить css с абсолютным URL-адресом для любого фонового изображения или других активов. Таким образом, вы можете генерировать его динамически после этого Как получить абсолютные пути изображения в ваших файлах css с помощью 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);
}