method

url_for

url_for(options = nil)
public

Generate a url based on the options provided, default_url_options and the routes defined in routes.rb. The following options are supported:

  • :only_path - If true, the relative url is returned. Defaults to false.

  • :protocol - The protocol to connect to. Defaults to ‘http’.

  • :host - Specifies the host the link should be targeted at. If :only_path is false, this option must be provided either explicitly, or via default_url_options.

  • :subdomain - Specifies the subdomain of the link, using the tld_length to split the domain from the host.

  • :domain - Specifies the domain of the link, using the tld_length to split the subdomain from the host.

  • :tld_length - Number of labels the TLD id composed of, only used if :subdomain or :domain are supplied. Defaults to ActionDispatch::Http::URL.tld_length, which in turn defaults to 1.

  • :port - Optionally specify the port to connect to.

  • :anchor - An anchor name to be appended to the path.

  • :trailing_slash - If true, adds a trailing slash, as in “/archive/2009/”

Any other key (:controller, :action, etc.) given to url_for is forwarded to the Routes module.

Examples:

url_for :controller => 'tasks', :action => 'testing', :host => 'somehost.org', :port => '8080'    # => 'http://somehost.org:8080/tasks/testing'
url_for :controller => 'tasks', :action => 'testing', :host => 'somehost.org', :anchor => 'ok', :only_path => true    # => '/tasks/testing#ok'
url_for :controller => 'tasks', :action => 'testing', :trailing_slash => true  # => 'http://somehost.org/tasks/testing/'
url_for :controller => 'tasks', :action => 'testing', :host => 'somehost.org', :number => '33'  # => 'http://somehost.org/tasks/testing?number=33'

3Notes

How to specify :only_path when non-hash options

zubin · Mar 25, 20114 thanks

When passing in an object, as opposed to a hash, you can't do this because url_for accepts one argument:

url_for(post, :only_path => true)

Instead, do this:

polymorphic_url(object, :routing_type => :path)

Model objects routed with :as

danwich · Jan 16, 20121 thank

When providing a model object, url_for will not work if the model's routes are named using the :as option. You can instead use the named helper methods (posts_path, post_path(:id), etc.).

Passing an object as argument

MMSequeira · Sep 7, 2011

It is possible to pass an instance of a record to the method. See the documentation of polymorphic_url (http://apidock.com/rails/ActionDispatch/Routing/PolymorphicRoutes).