Returns the URL for the set of options provided. This takes
the same options as url_for in Action Controller (see the
documentation for ActionController::Base#url_for). Note that
by default :only_path is true so you'll get
the relative “/controller/action” instead of the fully qualified URL like
“example.com/controller/action”.
:anchor - Specifies the anchor name to be appended to the
path.
:only_path - If true, returns the relative URL (omitting the
protocol, host name, and port) (true by default unless
:host is specified).
:trailing_slash - If true, adds a trailing slash, as in
“/archive/2005/”. Note that this is currently not recommended since it
breaks caching.
:host - Overrides the default (current) host if provided.
:protocol - Overrides the default (current) protocol if
provided.
:user - Inline HTTP authentication (only plucked out if
:password is also present).
:password - Inline HTTP authentication (only plucked out if
:user is also present).
Passing a record (like an Active Record) instead of a hash as the options
parameter will trigger the named route for that record. The lookup will
happen on the name of the class. So passing a Workshop object will attempt
to use the workshop_path route. If you have a nested route,
such as admin_workshop_path you'll have to call that
explicitly (it's impossible for url_for to guess that
route).
Controllers passed in using the :controller option will retain
their namespace unless it is an absolute one.
<%= url_for(action: 'index') %>
# => /blog/
<%= url_for(action: 'find', controller: 'books') %>
# => /books/find
<%= url_for(action: 'login', controller: 'members', only_path: false, protocol: 'https') %>
# => https://www.example.com/members/login/
<%= url_for(action: 'play', anchor: 'player') %>
# => /messages/play/#player
<%= url_for(action: 'jump', anchor: 'tax&ship') %>
# => /testing/jump/#tax&ship
<%= url_for(Workshop.new) %>
# relies on Workshop answering a persisted? call (and in this case returning false)
# => /workshops
<%= url_for(@workshop) %>
# calls @workshop.to_param which by default returns the id
# => /workshops/5
# to_param can be re-defined in a model to provide different URL names:
# => /workshops/1-workshop-name
<%= url_for("http://www.example.com") %>
# => http://www.example.com
<%= url_for(:back) %>
# if request.env["HTTP_REFERER"] is set to "http://www.example.com"
# => http://www.example.com
<%= url_for(:back) %>
# if request.env["HTTP_REFERER"] is not set or is blank
# => javascript:history.back()
<%= url_for(action: 'index', controller: 'users') %>
# Assuming an "admin" namespace
# => /admin/users
<%= url_for(action: 'index', controller: '/users') %>
# Specify absolute path with beginning slash
# => /users
# File lib/action_view/routing_url_for.rb, line 76 def url_for(options = nil) case options when String options when nil, Hash options ||= {} options = { :only_path => options[:host].nil? }.merge!(options.symbolize_keys) super when :back _back_url else polymorphic_path(options) end end