From 1cbd1f9698c686289003590557b44eaa1d918297 Mon Sep 17 00:00:00 2001
From: Nicholas Seckar <nseckar@gmail.com>
Date: Fri, 26 Aug 2005 10:57:43 +0000
Subject: Fix routing to handle :some_param => nil better

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2054 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
---
 actionpack/lib/action_controller/routing.rb | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

(limited to 'actionpack')

diff --git a/actionpack/lib/action_controller/routing.rb b/actionpack/lib/action_controller/routing.rb
index 8356b8ce55..74a0541d9e 100644
--- a/actionpack/lib/action_controller/routing.rb
+++ b/actionpack/lib/action_controller/routing.rb
@@ -19,10 +19,14 @@ module ActionController
         end
       end
 
-      def treat_hash(hash)
+      def treat_hash(hash, keys_to_delete = [])
         k = v = nil
         hash.each do |k, v|
-          hash[k] = (v.respond_to? :to_param) ? v.to_param.to_s : v.to_s if v
+          if v then hash[k] = (v.respond_to? :to_param) ? v.to_param.to_s : v.to_s
+          else
+            hash.delete k
+            keys_to_delete << k
+          end
         end
         hash
       end
@@ -393,8 +397,12 @@ module ActionController
           options[:controller] = Routing.controller_relative_to(controller, recall_controller)
         end
         options = recall.dup if options.empty? # XXX move to url_rewriter?
-        Routing.treat_hash(options) # XXX Move inwards (to generated code) or inline?
+        
+        keys_to_delete = []
+        Routing.treat_hash(options, keys_to_delete)
+        
         merged = recall.merge(options)
+        keys_to_delete.each {|key| merged.delete key}
         expire_on = Routing.expiry_hash(options, recall)
     
         generate_path(merged, options, expire_on)
-- 
cgit v1.2.3