49 votes

Comment obtenir une URL absolue pour un actif dans Rails 3.1?

image_path renvoie un chemin d'accès uniquement (pas d'accueil).

L' url_for aide ne pas accepter un seul chemin, donc quelque chose comme url_for(image_path('image.png')) ne fonctionnerait pas. Alors que la url_for en ActionDispatch::Http::Url.url_for semble faire l'affaire (la source), il ne semble pas être une interface publique pour elle.

Comment dois-je aller sur le faire? En fin de compte, ça serait bien d'avoir une fonction comme image_url qui fonctionne comme url_for pour les routes de sorte que je pourrais appeler" image_url('image.png') et obtenir la URL absolue compte tenu de l'ensemble de l' default_url_options.

53voto

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

De cette façon, vous obtenez l'URL en utilisant assets_host ou en vous joignant à root_url.

14voto

JofoCodin Points 1675

Essayez ceci dans votre application_helper.rb (à partir d’un des commentaires sur la page de Spike listée):

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

7voto

courtsimas Points 452

Nos actifs de production et de transfert sont sur s3 / cloudfront ... mais pas localement / dev. Alors j'ai écrit ceci (peut être exagéré, et peut probablement être simplifié):

   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
 

5voto

Steven Xu Points 8025

Il semblerait que, récemment, sass-rails interprète maintenant la commande image_url dans un fichier scss de la manière attendue, en résolvant jusqu'à l'emplacement final de l'image en question.

4voto

Hezad Points 119

De l' URL complète pour un chemin d'image dans Rails 3

 request.protocol + request.host_with_port + image_path('image.png')
 

Vous pouvez même créer un assistant pour le SÉCHER, quelque chose comme

 def full_image_path(img_path)
    request.protocol + request.host_with_port + image_path(img_path)
end
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X