1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Filter params that return nil for to_param and allow through false values

This commit is contained in:
Andrew White 2011-03-09 14:44:25 +00:00
parent f41dd99be7
commit 03cbd9672c
4 changed files with 13 additions and 2 deletions

View file

@ -1,5 +1,9 @@
*Rails 3.1.0 (unreleased)* *Rails 3.1.0 (unreleased)*
* URL parameters which return false for to_param now appear in the query string (previously they were removed) [Andrew White]
* URL parameters which return nil for to_param are now removed from the query string [Andrew White]
* ActionDispatch::MiddlewareStack now uses composition over inheritance. It is * ActionDispatch::MiddlewareStack now uses composition over inheritance. It is
no longer an array which means there may be methods missing that were not no longer an array which means there may be methods missing that were not
tested. tested.

View file

@ -41,7 +41,7 @@ module ActionDispatch
path = options.delete(:path) || '' path = options.delete(:path) || ''
params = options[:params] || {} params = options[:params] || {}
params.reject! {|k,v| !v } params.reject! {|k,v| v.to_param.nil? }
rewritten_url << (options[:trailing_slash] ? path.sub(/\?|\z/) { "/" + $& } : path) rewritten_url << (options[:trailing_slash] ? path.sub(/\?|\z/) { "/" + $& } : path)
rewritten_url << "?#{params.to_query}" unless params.empty? rewritten_url << "?#{params.to_query}" unless params.empty?

View file

@ -131,7 +131,6 @@ module ActionView
"new Ajax.Updater(#{update}, " "new Ajax.Updater(#{update}, "
url_options = options[:url] url_options = options[:url]
url_options = url_options.merge(:escape => false) if url_options.is_a?(Hash)
function << "'#{ERB::Util.html_escape(escape_javascript(url_for(url_options)))}'" function << "'#{ERB::Util.html_escape(escape_javascript(url_for(url_options)))}'"
function << ", #{javascript_options})" function << ", #{javascript_options})"

View file

@ -311,6 +311,14 @@ module AbstractController
assert_equal("/c/a", W.new.url_for(HashWithIndifferentAccess.new('controller' => 'c', 'action' => 'a', 'only_path' => true))) assert_equal("/c/a", W.new.url_for(HashWithIndifferentAccess.new('controller' => 'c', 'action' => 'a', 'only_path' => true)))
end end
def test_url_params_with_nil_to_param_are_not_in_url
assert_equal("/c/a", W.new.url_for(:only_path => true, :controller => 'c', :action => 'a', :id => Struct.new(:to_param).new(nil)))
end
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
private private
def extract_params(url) def extract_params(url)
url.split('?', 2).last.split('&').sort url.split('?', 2).last.split('&').sort