Comment puis-je obtenir l' URL absolue actuelle dans ma vue Ruby on Rails?
La request.request_uri
seule renvoie l' URL relative .
ruby-on-rails
ruby
url
Jakub Arnold
la source
la source
Réponses:
Pour Rails 3.2 ou Rails 4+
Vous devez utiliser
request.original_url
pour obtenir l'URL actuelle.Cette méthode est documentée à la méthode original_url , mais si vous êtes curieux, l'implémentation est:
Pour Rails 3:
Vous pouvez écrire
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
, car ilrequest.url
est désormais obsolète.Pour Rails 2:
Vous pouvez écrire à la
request.url
place derequest.request_uri
. Cela combine le protocole (généralement http: //) avec l'hôte et request_uri pour vous donner l'adresse complète.la source
fullpath
n'inclut PAS le protocole / domaine / port! Ce n'est pas une URL absolue!"http://#{request.host+request.fullpath}"
fonctionnera ou non, (si le port est important)"http://#{request.host}:#{request.port+request.fullpath}"
"http://#{request.host}:#{request.port}#{request.fullpath}"
request.url
est obsolète? La solution proposée n'est qu'un long chemin pour dire cerequest.url
qui fait déjà; l'implémentation est simplement protocol + host_with_port + fullpath ( github.com/rails/rails/blob/… )Je pense que la méthode Ruby on Rails 3.0 est maintenant
request.fullpath
.la source
Vous pourriez utiliser
url_for(only_path: false)
la source
AVERTISSEMENT DE DÉPRÉCIATION : L' utilisation de #request_uri est déconseillée . Utilisez plutôt fullpath.
la source
request.uri
et cela a déjà été souligné plusieurs fois dans cette question, mais ... ok, merciSi vous utilisez Rails 3.2 ou Rails 4, vous devez utiliser
request.original_url
pour obtenir l'URL actuelle.La documentation de la méthode se trouve à http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url mais si vous êtes curieux, l'implémentation est:
la source
Vous pouvez ajouter cette méthode current_url dans ApplicationController pour renvoyer l'URL actuelle et autoriser la fusion dans d'autres paramètres
Exemple d'utilisation:
la source
url_for params.merge(:format => "PDF", :only_path => false)
link_to
vous pouvez simplement utiliserparams.merge
et ignorer leurl_for
toutPour Ruby on Rails 3:
J'ai déclenché une session de débogage et interrogé l'objet de demande:
la source
Dans Ruby on Rails 3.1.0.rc4:
la source
fullpath
ne fournit pas unabsolute URL
comme l'affiche originale demandée.J'avais besoin de l' URL de l'application mais avec le sous-répertoire. J'ai utilisé:
la source
Et vous pouvez facilement ajouter un nouveau paramètre:
la source
Je pense que request.domain fonctionnerait, mais que faire si vous êtes dans un sous-répertoire comme blah.blah.com? Quelque chose comme ça pourrait fonctionner:
Modifiez les paramètres en fonction de la structure de votre chemin.
J'espère que cela pourra aider!
la source
Il semble que ce
request_uri
soit obsolète dans Ruby on Rails 3.la source
Utilisation de Ruby 1.9.3-p194 et Ruby on Rails 3.2.6:
Si request.fullpath ne fonctionne pas pour vous, essayez request.env ["HTTP_REFERER"]
Voici mon histoire ci-dessous.
J'ai eu un problème similaire avec la détection de l'URL actuelle (qui est affichée dans la barre d'adresse de l'utilisateur dans son navigateur) pour les pages cumulatives qui combinent des informations provenant de différents contrôleurs, par exemple
http://localhost:3002/users/1/history/issues
,.L'utilisateur peut basculer vers différentes listes de types de problèmes. Toutes ces listes sont chargées via Ajax à partir de différents contrôleurs / partiels (sans rechargement).
Le problème était de définir le chemin d'accès correct pour le bouton de retour dans chaque élément de la liste afin que le bouton de retour puisse fonctionner correctement à la fois dans sa propre page et dans l' historique cumulatif des pages. .
Dans le cas où j'utilise request.fullpath , il retourne le chemin de la dernière requête JavaScript qui n'est certainement pas l'URL que je recherche.
J'ai donc utilisé request.env ["HTTP_REFERER"] qui stocke l'URL de la dernière requête rechargée.
Voici un extrait du partiel pour prendre une décision
la source
Cela fonctionne pour Ruby on Rails 3.0 et devrait être pris en charge par la plupart des versions de Ruby on Rails:
la source
Aucune des suggestions ici dans le fil de discussion ne m'a malheureusement aidé, sauf celle où quelqu'un a dit qu'il avait utilisé le débogueur pour trouver ce qu'il cherchait.
J'ai créé des pages d'erreur personnalisées au lieu des 404 et 500 standard, mais j'ai
request.url
terminé au/404
lieu de ce qui était attendu/non-existing-mumbo-jumbo
.Ce que je devais utiliser était
la source
Si par parent, vous voulez dire juste sans le domaine, alors examinez
request.domain
.la source
la source
Vous pouvez utiliser la méthode ruby:
qui obtiendra le chemin complet avec l'URL de base:
la source
:root_url
pour obtenir l'URL absolue? Supposons que j'utilise quelque chose commesome_method(:products_brand_url, brand: brand, entity_name: "brand")
etsome_method
est défini comme `def some_method (route, opts = {}) end` Je ne veux pas que mon itinéraire ressemble à -http://localhost:3000/brands/brand_name?&entity_name="brand"
. Je veux que l'itinéraire ressemblehttp://localhost:3000/brands/brand_name
. Je veux juste que celaentity_name
fasse partie du hachage opts et non en tant que paramètres de l'url absolue.root_url
.Dans Rails 3, vous pouvez utiliser
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
la source
vous pouvez utiliser n'importe lequel pour les rails 3.2:
Je pense que ça marchera partout
la source
Rails 4.0
vous pouvez utiliser
request.original_url
, la sortie sera comme ci-dessous l'exemplela source
Pour Rails 3.2 ou Rails 4 Obtenez simplement de cette manière "request.original_url" Référence: méthode URL d'origine
Pour Rails 3 Comme request.url est obsolète, nous pouvons obtenir un chemin absolu en concaténant
Pour Rails 2
la source
si vous voulez être précis, c'est-à-dire que vous connaissez le chemin dont vous avez besoin:
la source
Pour les rails 3:
la source
fonctionne dans les rails 2.3.4 testés et ne connaît pas les autres versions.
la source
Pour obtenir l'URL de demande sans aucun paramètre de requête.
la source
Vous pouvez soit utiliser
ou
pour obtenir l'URL actuelle.
la source
Vous pouvez utiliser:
ou
J'espère que cela résoudra votre problème.
À votre santé
la source
Vous pouvez définir une variable sur
URI.parse(current_url)
, je ne vois pas encore cette proposition ici et cela fonctionne pour moi.la source
Pour obtenir l'URL absolue, ce qui signifie
from the root
qu'elle peut être affichée comme ceciL'assistant users_url génère une URL qui inclut le protocole et le nom d'hôte. L'assistant users_path génère uniquement la portion de chemin.
la source