Module: ActionController::UrlWriter
- Defined in:
- lib/action_controller/url_rewriter.rb
Overview
Write URLs from arbitrary places in your codebase, such as your mailers.
Example:
class MyMailer
include ActionController::UrlWriter
[: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.
Class Method Summary collapse
-
.included(base) ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#url_for(options) ⇒ Object
Generate a url based on the options provided, default_url_options and the routes defined in routes.rb.
Class Method Details
.included(base) ⇒ Object
:nodoc:
23 24 25 26 27 |
# File 'lib/action_controller/url_rewriter.rb', line 23 def self.included(base) #:nodoc: ActionController::Routing::Routes.install_helpers(base) base.mattr_accessor :default_url_options base. ||= end |
Instance Method Details
#url_for(options) ⇒ Object
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 tofalse
. -
: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 viadefault_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 therelative_url_root
set in ActionController::AbstractRequest.relative_url_root. -
: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'
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/action_controller/url_rewriter.rb', line 52 def url_for() = self.class..merge() url = '' unless .delete(:only_path) url << (.delete(:protocol) || 'http') url << '://' unless url.match("://") raise "Missing host to link to! Please provide :host parameter or set default_url_options[:host]" unless [:host] url << .delete(:host) url << ":#{.delete(:port)}" if .key?(:port) else # Delete the unused options to prevent their appearance in the query string. [:protocol, :host, :port, :skip_relative_url_root].each { |k| .delete(k) } end trailing_slash = .delete(:trailing_slash) if .key?(:trailing_slash) url << ActionController::AbstractRequest.relative_url_root.to_s unless [:skip_relative_url_root] anchor = "##{CGI.escape .delete(:anchor).to_param.to_s}" if [:anchor] generated = Routing::Routes.generate(, {}) url << (trailing_slash ? generated.sub(/\?|\z/) { "/" + $& } : generated) url << anchor if anchor url end |