Question about Rails-formatted query params in URL


Hi all,

I am seeing a behavior for which I can’t find documentation. I am
posting a form to a url with query params formatted in the Rails manner:

/controller/action?foo[bar]=3 # Of course, the brackets are properly

When doing this, the actual form fields get lost, e.g.

params[:foo] # This gives {:bar => 3}

even though the form has other fields for foo.

Any ideas?

Thanks so much,

Brian H.


What is shown in the log file for the parameters for the request? You
see data
Processing YourController#method … Parameters: …


2009/5/29 Brian H. removed_email_address@domain.invalid


On May 29, 3:04 pm, Brian H. removed_email_address@domain.invalid

params[:foo] # This gives {:bar => 3}

even though the form has other fields for foo.

so params[:foo] is being populated partially from parameters in the
URL, partially from form parameters ? Some of the parameter parsing
stuff changed in 2.3.2 so if you are using 2.3.2 would be interesting
to see if this is a regression.



Now that I’ve done a bit more testing, I think this is simply a
namespace collision. I think that query parameters and form parameters
share a namespace (the request), and it’s reasonable to have weird or
undefined behavior when there is a collision. It seems like Rails
behavior is to handle the form params first, putting them in the
‘params’ hash, then handle the query params. The Hash class’ behavior
would dictate a ‘last in wins’ behavior, which is consistent with what
I’m seeing.

I found that I don’t really have to encode that parameter in the URL,
which solves my immediate problem.