Home How do I get the current absolute URL in Ruby on Rails?

How do I get the current absolute URL in Ruby on Rails?

Jakub Arnold
1#
Jakub Arnold Published in 2010-01-29 22:32:44Z
 How can I get the current absolute URL in my Ruby on Rails view? The request.request_uri only returns the relative URL.
Peter Mortensen
2#
Peter Mortensen Reply to 2017-08-02 21:51:33Z

For Rails 3.2 or Rails 4+

You should use request.original_url to get the current URL.

This method is documented at original_url method, but if you're curious, the implementation is:

def original_url
base_url + original_fullpath
end


For Rails 3:

You can write "#{request.protocol}#{request.host_with_port}#{request.fullpath}", since request.url is now deprecated.

For Rails 2:

You can write request.url instead of request.request_uri. This combines the protocol (usually http://) with the host, and request_uri to give you the full address.

James M
3#
James M Reply to 2010-01-29 22:44:55Z
 I think request.domain would work, but what if you're in a sub directory like blah.blah.com? Something like this could work: <%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>  Change the parameters based on your path structure. Hope that helps!
Charles
4#
 You can add this current_url method in the ApplicationController to return the current URL and allow merging in other parameters # 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  Example Usage: current_url --> http://... current_url(:page=>4) --> http://...&page=4 
lulalala
5#
 DEPRECATION WARNING: Using #request_uri is deprecated. Use fullpath instead.
Peter Mortensen
6#
Peter Mortensen Reply to 2012-09-07 15:52:25Z
 I think that the Ruby on Rails 3.0 method is now request.fullpath.
Peter Mortensen
7#
Peter Mortensen Reply to 2012-09-07 15:52:44Z
 It looks like request_uri is deprecated in Ruby on Rails 3. Using #request_uri is deprecated. Use fullpath instead. 
Peter Mortensen
8#
Peter Mortensen Reply to 2012-09-07 15:53:02Z
 In Ruby on Rails 3.1.0.rc4:  request.fullpath 
Peter Mortensen
9#
Peter Mortensen Reply to 2012-09-07 15:53:42Z
 For Ruby on Rails 3: request.url request.host_with_port  I fired up a debugger session and queried the request object: request.public_methods 
grzuy
10#
 You could use url_for(:only_path => false)
Peter Mortensen
11#
Peter Mortensen Reply to 2012-09-07 15:54:23Z
 I needed the application URL but with the subdirectory. I used: root_url(:only_path => false) 
Peter Mortensen
12#
Peter Mortensen Reply to 2012-09-07 15:54:54Z
  url_for(params)  And you can easily add some new parameter: url_for(params.merge(:tag => "lol")) 
Peter Mortensen
13#
Peter Mortensen Reply to 2012-09-07 15:55:38Z
 This works for Ruby on Rails 3.0 and should be supported by most versions of Ruby on Rails: request.env['REQUEST_URI'] 
msroot
14#
 (url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false) 
Frans
15#
 None of the suggestions here in the thread helped me sadly, except the one where someone said he used the debugger to find what he looked for. I've created some custom error pages instead of the standard 404 and 500, but request.url ended in /404 instead of the expected /non-existing-mumbo-jumbo. What I needed to use was request.original_url 
Peter Mortensen
16#
Peter Mortensen Reply to 2012-09-07 15:58:32Z
 Using Ruby 1.9.3-p194 and Ruby on Rails 3.2.6: If request.fullpath doesn't work for you, try request.env["HTTP_REFERER"] Here's my story below. I got similar problem with detecting current URL (which is shown in address bar for user in her browser) for cumulative pages which combines information from different controllers, for example, http://localhost:3002/users/1/history/issues. The user can switch to different lists of types of issues. All those lists are loaded via Ajax from different controllers/partials (without reloading). The problem was to set the correct path for the back button in each item of the list so the back button could work correctly both in its own page and in the cumulative page history. In case I use request.fullpath, it returns the path of last JavaScript request which is definitely not the URL I'm looking for. So I used request.env["HTTP_REFERER"] which stores the URL of the last reloaded request. Here's an excerpt from the partial to make a decision - 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 
17#
 To get the absolute URL which means that the from the root it can be displayed like this <%= link_to 'Edit', edit_user_url(user) %>  The users_url helper generates a URL that includes the protocol and host name. The users_path helper generates only the path portion. users_url: http://localhost/users users_path: /users 
Victor S
18#
Victor S Reply to 2013-01-01 22:30:40Z
 if you want to be specific, meaning, you know the path you need: link_to current_path(@resource, :only_path => false), current_path(@resource) 
mikrobi
19#
 In Rails 3 you can use request.original_url  http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
Mike
20#
 If you're using Rails 3.2 or Rails 4 you should use request.original_url to get the current URL. Documentation for the method is at http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url but if you're curious the implementation is: def original_url base_url + original_fullpath end 
Just In Time Berlake
21#
Just In Time Berlake Reply to 2017-02-12 21:07:48Z
 You can use the ruby method: :root_url  which will get the full path: localhost:3000/bla
Pankhuri
22#
 For rails 3 : request.fullpath
Satishakumar Awati
23#
Satishakumar Awati Reply to 2014-03-02 21:15:22Z
 request.env["REQUEST_URI"]  works in rails 2.3.4 tested and do not know about other versions.
uma
24#
 you can use any one for rails 3.2: request.original_url or request.env["HTTP_REFERER"] or request.env['REQUEST_URI']  I think it will work every where "#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}" 
Hans Gamarra De Lima
25#
Hans Gamarra De Lima Reply to 2014-06-20 22:53:10Z
 you can get absolute url by calling: request.original_url  or request.env['HTTP_REFERER'] 
Arvind singh
26#
Arvind singh Reply to 2015-03-26 14:07:19Z
 Rails 4.0 you can use request.original_url, output will be as given below example get "/articles?page=2" request.original_url # => "http://www.example.com/articles?page=2" 
Nerve
27#
 To get the request URL without any query parameters. def current_url_without_parameters request.base_url + request.path end 
user3118220
28#
 Rails 4 Controller: def absolute_url request.base_url + request.original_fullpath end  Action Mailer Notable changes in 4.2 release: link_to and url_for generate absolute URLs by default in templates, it is no longer needed to pass only_path: false. (Commit) View: If you use the _url suffix, the generated URL is absolute. Use _path to get a relative URL. <%= link_to "Home", root_url %>  For More Details, go to: http://blog.grepruby.com/2015/04/absolute-url-full-url-in-rails-4.html
 You can use: request.full_path  or request.url  Hopefully it will resolve your problem. Cheers
 You can either use request.original_url  or "#{request.protocol}#{request.host_with_port}"  to get the current URL.