Can't use ActionDispatch::Request in Rails middleware because path_parameters get lost

Hi,

I just encountered a bit of an issue where we call request.params of
an ActionDispatch::Request inside a rack middleware right before a
Rails 3.0.3 app. The issue is that the path_parameters never appear
in the parameters hash if you call request.params before the rails
app.

It seems that that the requests.params method memoizes itself in
"action_dispatch.request.parameters" without the parsed
path_parameters. The router seems to properly extract the path params
but never calls request.path_parameters= method which would properly
reset the memoized 'parameters' method.

You can see the code in question here:

      # file: action_dispatch/http/parameters.rb
      # Returns both GET and POST \parameters in a single hash.
      def parameters
        @env["action_dispatch.request.parameters"] ||= begin
          params = request_parameters.merge(query_parameters)
          params.merge!(path_parameters)
          encode_params(params).with_indifferent_access
        end
      end
      alias :params :parameters

      def path_parameters=(parameters) #:nodoc:
        @symbolized_path_params = nil
        @env.delete("action_dispatch.request.parameters")
        @env["action_dispatch.request.path_parameters"] = parameters
      end

You can also see the Router Dispatcher directly grabbing the
path_parameters from the environment instead of going to through the
request object.

      #file: action_dispatch/routing/route_set.rb
      class RouteSet
      PARAMETERS_KEY = 'action_dispatch.request.path_parameters'

      class Dispatcher #:nodoc:
        def initialize(options={})
          @defaults = options[:defaults]
          @glob_param = options.delete(:glob)
          @controllers = {}
        end

        def call(env)
          params = env[PARAMETERS_KEY]
          prepare_params!(params)

For now, I've moved to using a Rack::Request object which is a shame
because I had to manually extract out the subdomain and the bug wasn't
very intuitive.

Let me know if I can help with this.

Thanks,
Adam