J'utilise Rails 3.1. J'essaie de comprendre cela, et à ma grande surprise, il semble que Rails ne vient pas avec cette méthode du tout. Peut-être que je me trompe.
Quelqu'un peut-il montrer comment obtenir une URL absolue complète vers une image?
J'utilise asset_path(image.png)
qui me donne le chemin relatif à utiliser dans l'application. J'ai essayé de faire une root_url + asset_path(image.png)
mais cela me donne juste un http://localhost:3000//assets/image.png
avec les doubles barres obliques
Quelqu'un a-t-il un moyen efficace de le faire?
Voir la section Utilisation des hôtes de ressources dans la documentation . Vous devez spécifier un asset_Host
. Vous pouvez également le construire dynamiquement à partir du chaînage des requêtes "#{request.protocol}#{request.Host_with_port}"
mettre ceci dans application_helper.rb
def asset_url asset
"#{request.protocol}#{request.Host_with_port}#{asset_path(asset)}"
end
alors vous pouvez utiliser asset_url
dans vos vues.
Pour Rails 4, et peut-être plus tôt, utilisez:
config.action_mailer.asset_Host = 'https://assets.com'
Dans mon config/environments/*.rb
Je l'ai déjà adapté à chaque environnement:
config.domain = 'mysite.dev'
Il s'agissait donc simplement d'ajouter
config.action_controller.asset_Host = "http://" + config.domain
à chaque fichier. Ensuite asset_path
se comportera miraculeusement comme si c'était asset_url
.
Exemple de structure de dossiers.
app/
assets/
flags/
32x32/
en.png
256x256/
en.png
Si vous souhaitez générer un chemin d'image de drapeau absolu, nous pouvons ajouter à nos deux méthodes 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
Dans nos applications/view/products.html.erb. Nous devons appeler uniquement:
<% flag_path = generate_flag_path_by_locale("en") %>
Résultat final: