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 targetted at. If :only_path is false, this option must be provided either explicitly, or via default_url_options.
- :port Optionally specify the port to connect to.
- :anchor An anchor name to be appended to the path.
- :skip_relative_url_root If true, the url is not constructed using the relative_url_root set in ActionController::AbstractRequest.relative_url_root.
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', :host=>'somehost.org', :number => '33' # => 'http://somehost.org/tasks/testing?number=33'
Source Code
# File action_controller/url_rewriter.rb, line 47 def url_for(options) options = self.class.default_url_options.merge(options) url = '' unless options.delete(:only_path) url << (options.delete(:protocol) || 'http') url << '://' unless url.match("://") raise "Missing host to link to! Please provide :host parameter or set default_url_options[:host]" unless options[:host] url << options.delete(:host) url << ":#{options.delete(:port)}" if options.key?(:port) else # Delete the unused options to prevent their appearance in the query string. [:protocol, :host, :port, :skip_relative_url_root].each { |k| options.delete(k) } end url << ActionController::AbstractRequest.relative_url_root.to_s unless options[:skip_relative_url_root] anchor = "##{CGI.escape options.delete(:anchor).to_param.to_s}" if options[:anchor] url << Routing::Routes.generate(options, {}) url << anchor if anchor url end
<code/>and<pre/>for code samples.