Comment puis-je obtenir l'URL absolue actuelle dans Ruby on Rails?

Comment puis-je obtenir l'URL absolue actuelle dans ma vue Ruby on Rails?

Le request.request_uri renvoie uniquement l'URL relative.

950
demandé sur Andrei Eliade 2010-01-30 01:32:44

30 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 à original_url method , mais si vous êtes curieux, l'implémentation est:

def original_url
  base_url + original_fullpath
end

Pour Rails 3:

, Vous pouvez écrire "#{request.protocol}#{request.host_with_port}#{request.fullpath}" depuis request.url est maintenant obsolète.


Pour Rails 2:

, Vous pouvez écrire request.url au lieu de request.request_uri. Cette combine le protocole (généralement http://) avec l'hôte, et request_uri pour vous donner le plein adresse.

1333
répondu Manish Shrivastava 2018-05-12 07:32:58

Je pense que la méthode Ruby on Rails 3.0 est maintenant request.fullpath.

126
répondu mcr 2012-09-07 15:52:25

Vous pouvez utiliser url_for(:only_path => false)

112
répondu grzuy 2011-10-07 17:18:25

Avertissement de dépréciation: L'utilisation de # request_uri est obsolète . Utilisez fullpath à la place.

64
répondu ecoologic 2013-05-13 02:36:56

Si 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 est à http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url mais si vous êtes curieux, l'implémentation est:

def original_url
  base_url + original_fullpath
end
56
répondu Mike 2013-07-26 15:24:41

Vous pouvez ajouter cette méthode current_url dans ApplicationController pour renvoyer l'URL actuelle et autoriser la fusion dans d'autres paramètres

# https://x.com/y/1?page=1 
# + current_url( :page => 3 )
# = https://x.com/y/1?page=3
def current_url(overwrite={})
    url_for :only_path => false, :params => params.merge(overwrite)
end

Exemple D'Utilisation:

current_url --> http://...
current_url(:page=>4) --> http://...&page=4
49
répondu grosser 2017-08-23 04:19:15

Pour Ruby sur Rails 3:

request.url
request.host_with_port

J'ai déclenché une session de débogueur et interrogé l'objet de requête:

request.public_methods
34
répondu Duke 2012-09-07 15:53:42

Dans Ruby on Rails 3.1.0.rc4:

 request.fullpath
30
répondu Lucas Renan 2012-09-07 15:53:02

J'avais besoin de l'application URL mais avec le sous-répertoire. J'ai utilisé:

root_url(:only_path => false)
27
répondu Dorian 2012-09-07 15:54:23
 url_for(params)

Et vous pouvez facilement ajouter un nouveau paramètre:

url_for(params.merge(:tag => "lol"))
26
répondu Yuri Barbashov 2012-09-07 15:54:54

Je pense demande.le domaine fonctionnerait, mais que se passe-t-il si vous êtes dans un sous-répertoire comme blah.blah.com? quelque chose comme ça pourrait fonctionner:

<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>

Modifiez les paramètres en fonction de la structure de votre chemin.

Espérons que cela aide!

14
répondu James M 2010-01-29 22:44:55

Il semble que request_uri soit obsolète dans Ruby on Rails 3.

Using #request_uri is deprecated. Use fullpath instead.
13
répondu Ken Earley 2012-09-07 15:52:44

Cela fonctionne pour Ruby on Rails 3.0 et devrait être pris en charge par la plupart des versions de Ruby on Rails:

request.env['REQUEST_URI']
12
répondu Tim Santeford 2012-09-07 15:55:38

En utilisant Ruby 1.9.3-p194 et Ruby on Rails 3.2.6:

Si demande.fullpath ne fonctionne pas pour vous, essayez la requête .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 combine des informations provenant de différents contrôleurs, par exemple, http://localhost:3002/users/1/history/issues.

L'utilisateur peut passer à différentes listes de types de problèmes. Toutes ces listes sont chargé via Ajax À partir de différents contrôleurs / partiels (sans rechargement).

Le problème était de définir le chemin 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 la page cumulative history .

Dans le cas où j'utilise demande.fullpath , il renvoie le chemin de la dernière requête JavaScript qui n'est certainement pas l'URL que je recherche.

J'ai Donc utilisé demande.env ["HTTP_REFERER"] qui stocke URL de la dernière requête rechargée.

Voici un extrait du partiel pour prendre une décision

- if request.env["HTTP_REFERER"].to_s.scan("history").length > 0
  - back_url = user_history_issue_path(@user, list: "needed_type")
- else
  - back_url = user_needed_type_issue_path(@user)
- remote ||= false
=link_to t("static.back"), back_url, :remote => remote
12
répondu Serge Seletskyy 2012-09-07 15:58:32

Aucune des suggestions ici dans le fil ne m'a aidé malheureusement, sauf celle où quelqu'un a dit qu'il utilisait le débogueur pour trouver ce qu'il cherchait.

J'ai créé des pages d'erreur personnalisées au lieu des normes 404 et 500, mais request.url s'est terminé par /404 au lieu du /non-existing-mumbo-jumbo attendu.

Ce que j'avais besoin d'utiliser était

request.original_url
11
répondu Frans 2013-04-04 12:58:09

Si par rapport, vous voulez dire juste sans le domaine, alors regardez dans request.domain.

9
répondu ghoppe 2012-09-07 15:51:21

Vous pouvez utiliser la méthode ruby:

:root_url

Qui obtiendra le chemin complet avec l'url de base:

localhost:3000/bla
9
répondu Idan Wender 2018-04-03 09:07:14
(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)
8
répondu msroot 2012-05-11 07:21:17

Dans Rails 3, vous pouvez utiliser

request.original_url

Http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url

6
répondu mikrobi 2013-03-13 11:58:41

Rails 4.0

Vous pouvez utiliser request.original_url, la sortie sera comme donné ci-dessous exemple

get "/articles?page=2"

request.original_url # => "http://www.example.com/articles?page=2"
4
répondu Arvind singh 2015-03-26 14:07:19

Si vous voulez être spécifique, c'est-à-dire, vous connaissez le chemin dont vous avez besoin:

link_to current_path(@resource, :only_path => false), current_path(@resource)
3
répondu Victor S 2013-01-01 22:30:40

Pour rails 3:

Demande.fullpath

3
répondu Pankhuri 2013-08-10 08:43:32

Vous pouvez utiliser n'importe lequel pour rails 3.2:

request.original_url
or
request.env["HTTP_REFERER"]
or
request.env['REQUEST_URI']

Je pense que cela fonctionnera partout

"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}"
3
répondu uma 2014-03-11 05:17:06
request.env["REQUEST_URI"]

Fonctionne dans rails 2.3.4 testé et ne connaît pas d'autres versions.

2
répondu Satishakumar Awati 2014-03-02 21:15:22

Pour obtenir L'URL de la requête sans aucun paramètre de requête.

def current_url_without_parameters
  request.base_url + request.path
end
2
répondu Nerve 2015-04-09 13:34:29

Vous pouvez utiliser

request.original_url 

Ou

"#{request.protocol}#{request.host_with_port}" 

Pour obtenir L'URL actuelle.

2
répondu Robin Garg 2015-12-02 07:07:32

Pour Rails 3.2 ou Rails 4 Simplement obtenir de cette façon "demande.original_url" Référence: méthode URL originale

Pour Rails 3 En tant que demande.l'url est obsolète.Nous pouvons obtenir un chemin absolu en concaténant

"#{request.protocol}#{request.host_with_port}#{request.fullpath}"

Pour Les Rails 2

request.url
2
répondu Amit 2018-05-12 08:43:58

Vous pouvez utiliser:

request.full_path

Ou

request.url

Espérons que cela résoudra votre problème.

Santé

1
répondu Ali Hassan Mirza 2015-08-18 05:41:38

Vous pouvez définir une variable sur URI.parse(current_url), Je ne vois pas encore cette proposition ici et cela fonctionne pour moi.

1
répondu RaK427 2016-03-04 20:27:50

Pour obtenir l'URL absolue ce qui signifie que le from the root, il peut être affiché comme ceci

<%= link_to 'Edit', edit_user_url(user) %>

L'Assistant users_url génère une URL qui inclut le protocole et l'hôte nom. L'Assistant users_path ne génère que la partie path.

users_url: http://localhost/users
users_path: /users
0
répondu Ahmad hamza 2012-12-12 14:41:42