Skip to content
Browse files

Take Hash with options inside Array in #url_for

  • Loading branch information...
1 parent 77ed4d9 commit d04c4fac3bb6f75ba15704dd03faeb5f2d7033f7 Andrey Ognevsky committed Nov 13, 2013
View
9 actionpack/CHANGELOG.md
@@ -1,3 +1,12 @@
+* Take a hash with options inside array in #url_for
+
+ Example:
+
+ url_for [:new, :admin, :post, { param: 'value' }]
+ # => http://example.com/admin/posts/new?params=value
+
+ *Andrey Ognevsky*
+
* Add `session#fetch` method
fetch behaves similarly to [Hash#fetch](http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-fetch),
View
2 actionpack/lib/action_dispatch/routing/url_for.rb
@@ -155,6 +155,8 @@ def url_for(options = nil)
_routes.url_for(options.symbolize_keys.reverse_merge!(url_options))
when String
options
+ when Array
+ polymorphic_url(options, options.extract_options!)
else
polymorphic_url(options)
end
View
18 actionpack/test/controller/url_for_test.rb
@@ -370,6 +370,24 @@ def test_false_url_params_are_included_in_query
assert_equal("/c/a?show=false", W.new.url_for(:only_path => true, :controller => 'c', :action => 'a', :show => false))
end
+ def test_url_generation_with_array_and_hash
+ with_routing do |set|
+ set.draw do
+ namespace :admin do
+ resources :posts
+ end
+ end
+
+ kls = Class.new { include set.url_helpers }
+ kls.default_url_options[:host] = 'www.basecamphq.com'
+
+ controller = kls.new
+ assert_equal("http://www.basecamphq.com/admin/posts/new?param=value",
+ controller.send(:url_for, [:new, :admin, :post, { param: 'value' }])
+ )
+ end
+ end
+
private
def extract_params(url)
url.split('?', 2).last.split('&').sort
View
2 actionview/lib/action_view/routing_url_for.rb
@@ -83,6 +83,8 @@ def url_for(options = nil)
super
when :back
_back_url
+ when Array
+ polymorphic_path(options, options.extract_options!)
else
polymorphic_path(options)
end

0 comments on commit d04c4fa

Please sign in to comment.
Something went wrong with that request. Please try again.