ruby-on-rails - generate - route helper rails




Comment obtenir l'URL absolue actuelle dans Ruby on Rails? (20)

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

request.request_uri renvoie uniquement l'URL relative.


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 la suivante:

def original_url
  base_url + original_fullpath
end

Pour Rails 3:

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

Pour Rails 2:

Vous pouvez écrire request.url au lieu de request.request_uri . Ceci combine le protocole (habituellement http: //) avec l'hôte, et request_uri pour vous donner l'adresse complète.


Aucune des suggestions ici dans le fil m'a aidé tristement, excepté celui où quelqu'un a dit qu'il a utilisé le débogueur pour trouver ce qu'il a cherché.

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

Ce que j'avais besoin d'utiliser était

request.original_url



En utilisant 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 rencontré le même problème avec la détection de l'URL actuelle (affichée dans la barre d'adresse de l'utilisateur dans son navigateur) pour les pages cumulées qui combine les informations 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ées via Ajax à partir de différents contrôleurs / partiels (sans rechargement).

Le problème consistait à 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 l' historique des pages cumulées.

Au cas où j'utiliser request.fullpath , il retourne le chemin de la dernière requête JavaScript qui n'est certainement pas l'URL que je cherche.

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

- 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

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

Using #request_uri is deprecated. Use fullpath instead.

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


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:

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

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

J'espère que cela pourra aider!


Pour les rails 3:

request.fullpath


Pour obtenir l'URL absolue, cela signifie que from the root peut être affichée comme ceci

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

L'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 partie path.

users_url: http://localhost/users
users_path: /users

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



Vous pouvez définir une variable à URI.parse(current_url) , je ne vois pas encore cette proposition et ça marche pour moi.


Vous pouvez soit utiliser

request.original_url 

ou

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

pour obtenir l'URL actuelle.


Vous pouvez utiliser la méthode ruby:

:root_url

qui obtiendra le chemin complet avec l'URL de base:

localhost:3000/bla

Vous pouvez utiliser:

request.full_path

ou

request.url

J'espère que cela va résoudre votre problème.

À votre santé


vous pouvez utiliser n'importe quel rail 3.2:

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

Je pense que ça marchera partout

"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}"

Rails 4.0

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

get "/articles?page=2"

request.original_url # => "http://www.example.com/articles?page=2"

 url_for(params)

Et vous pouvez facilement ajouter un nouveau paramètre:

url_for(params.merge(:tag => "lol"))

(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)






url