diff options
author | Piotr Sarnacki <drogus@gmail.com> | 2010-07-08 15:42:40 +0200 |
---|---|---|
committer | Piotr Sarnacki <drogus@gmail.com> | 2010-09-03 22:59:05 +0200 |
commit | eedbf87d15b99a7cae38b0d8894fc39f1e70a81e (patch) | |
tree | 97fe871d6c640c6b83e7956396cd60b0c42b1d67 /actionpack/lib/action_controller/metal/url_for.rb | |
parent | 177a4bd5b7f903030a100f9b5092b1fa62c7c748 (diff) | |
download | rails-eedbf87d15b99a7cae38b0d8894fc39f1e70a81e.tar.gz rails-eedbf87d15b99a7cae38b0d8894fc39f1e70a81e.tar.bz2 rails-eedbf87d15b99a7cae38b0d8894fc39f1e70a81e.zip |
New way of generating urls for Application from Engine.
It's based specifying application's script_name with:
Rails.application.default_url_options = {:script_name => "/foo"}
default_url_options method is delegated to routes. If router
used to generate url differs from the router passed via env
it always overwrites :script_name with this value.
Diffstat (limited to 'actionpack/lib/action_controller/metal/url_for.rb')
-rw-r--r-- | actionpack/lib/action_controller/metal/url_for.rb | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/actionpack/lib/action_controller/metal/url_for.rb b/actionpack/lib/action_controller/metal/url_for.rb index a51fc5b8e4..ca91e1f362 100644 --- a/actionpack/lib/action_controller/metal/url_for.rb +++ b/actionpack/lib/action_controller/metal/url_for.rb @@ -5,11 +5,20 @@ module ActionController include ActionDispatch::Routing::UrlFor def url_options - super.reverse_merge( + options = {} + if respond_to?(:env) && env + if _routes.equal?(env["action_dispatch.routes"]) + options[:skip_prefix] = true + elsif env["action_dispatch.routes"] + options[:script_name] = _routes.default_url_options[:script_name] + end + end + + super.merge(options).reverse_merge( :host => request.host_with_port, :protocol => request.protocol, :_path_segments => request.symbolized_path_parameters - ).merge(:script_name => request.script_name) + ).reverse_merge(:script_name => request.script_name) end def _routes |