diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 87afe5647b980f041c007ed1c1750d558917312d..f7f20669366c4229e0efaa1fdd6d1ef93f06babf 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Fixed that named routes didn't use the default values for action and possible other parameters #1534 [Nicholas Seckar] + * Fixed JavascriptHelper#visual_effect to use camelize such that :blind_up will work #1639 [pelletierm@eastmedia.net] * Fixed that a SessionRestoreError was thrown if a model object was placed in the session that wasn't available to all controllers. This means that it's no longer necessary to use the 'model :post' work-around in ApplicationController to have a Post model in your session. diff --git a/actionpack/lib/action_controller/routing.rb b/actionpack/lib/action_controller/routing.rb index 940136efd0a44a6dc9d6200d0d096054bac5ac86..d69c862989deb584943b8520b79a35ec5788eb71 100644 --- a/actionpack/lib/action_controller/routing.rb +++ b/actionpack/lib/action_controller/routing.rb @@ -256,13 +256,14 @@ def to_s() join '/' end class Route #:nodoc: attr_accessor :components, :known - attr_reader :path, :options, :keys + attr_reader :path, :options, :keys, :defaults def initialize(path, options = {}) @path, @options = path, options initialize_components path defaults, conditions = initialize_hashes options.dup + @defaults = defaults.dup configure_components(defaults, conditions) initialize_keys end @@ -576,7 +577,7 @@ def url_helper_name(name) end def name_route(route, name) - hash = route.known.symbolize_keys + hash = route.defaults.merge(route.known).symbolize_keys hash[:controller] = "/#{hash[:controller]}" define_method(hash_access_name(name)) { hash } diff --git a/actionpack/test/controller/routing_test.rb b/actionpack/test/controller/routing_test.rb index 3b3cee6ae6e9923066f3f7c3dd417eb5498d884b..48151ba19816fec5417017fcf924160fa108f7fe 100644 --- a/actionpack/test/controller/routing_test.rb +++ b/actionpack/test/controller/routing_test.rb @@ -661,7 +661,17 @@ def test_named_route_with_option x = setup_for_named_route assert_equal({:controller => '/content', :action => 'show_page', :title => 'new stuff'}, x.new.send(:page_url, :title => 'new stuff')) - end + end + + def test_named_route_with_default + rs.page 'page/:title', :controller => 'content', :action => 'show_page', :title => 'AboutPage' + x = setup_for_named_route + assert_equal({:controller => '/content', :action => 'show_page', :title => 'AboutPage'}, + x.new.send(:page_url)) + assert_equal({:controller => '/content', :action => 'show_page', :title => 'AboutRails'}, + x.new.send(:page_url, :title => "AboutRails")) + + end def setup_for_named_route x = Class.new