Module ActionController::UrlWriter
In: vendor/rails/actionpack/lib/action_controller/url_rewriter.rb

Write URLs from arbitrary places in your codebase, such as your mailers.

Example:

  class MyMailer
    include ActionController::UrlWriter
    default_url_options[:host] = 'www.basecamphq.com'

    def signup_url(token)
      url_for(:controller => 'signup', action => 'index', :token => token)
    end
 end

In addition to providing url_for, named routes are also accessible after including UrlWriter.

Methods

url_for  

Public Instance methods

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.

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]

    # File vendor/rails/actionpack/lib/action_controller/url_rewriter.rb, line 47
47:     def url_for(options)
48:       options = self.class.default_url_options.merge(options)
49:       
50:       url = ''
51: 
52:       unless options.delete :only_path
53:         url << (options.delete(:protocol) || 'http')
54:         url << '://' unless url.match("://") #dont add separator if its already been specified in :protocol 
55:         
56:         raise "Missing host to link to! Please provide :host parameter or set default_url_options[:host]" unless options[:host]
57: 
58:         url << options.delete(:host)
59:         url << ":#{options.delete(:port)}" if options.key?(:port)
60:       else
61:         # Delete the unused options to prevent their appearance in the query string
62:         [:protocol, :host, :port].each { |k| options.delete k }
63:       end
64: 
65:       anchor = "##{CGI.escape options.delete(:anchor).to_param.to_s}" if options.key?(:anchor)
66:       url << Routing::Routes.generate(options, {})
67:       url << anchor if anchor
68: 
69:       return url
70:     end

[Validate]