Merging params into another hash

I have a search form that submits three parameters via an xhr
request. The three parameters are full_name, email, and postal_code.
In the controller action, I want to stuff those values into the
session so they can be accessed later to repopulate the search form.

I start by making sure there is a place in session

session[:people_search] = Hash.new if session[:people_search].nil?

When I do this

session[:people_search][:full_name] = params[:full_name]
session[:people_search][:email] = params[:email]
session[:people_search][:postal_code] = params[:postal_code]

Everything works as I want it to. But when i do this

session[:people_search].merge!(params)

or

session[:people_search] = session[:people_search].merge(params)

or

session[:people_search] = params

it does not work.

In case you’re curious, I don’t mind the other keys that exist in
params. I’m just trying to find the easiest and most portable way to
get things out of params into session.

Can someone explain to me why the direct assignment of each
individual key works but none of the other methods do.

Thanks,
Phillip

Can someone explain to me why the direct assignment of each
individual key works but none of the other methods do.

Five more minutes. I couldn’t have thought about it for five more
minutes!

params is a HashWithIndifferentAccess while my session
[:people_search] was just a plain old Hash. When I changed the
instantiation of session[:people_search] to
HashWithIndifferentAccess, it works.

sigh

On Dec 28, 12:17 pm, Phillip K. [email protected] wrote:

params is a HashWithIndifferentAccess while my session
[:people_search] was just a plain old Hash. When I changed the
instantiation of session[:people_search] to
HashWithIndifferentAccess, it works.

Just for my education, would changing the keys from symbols to strings
also have worked?

///ark

On Dec 28, 2007, at 3:43 PM, Mark W. wrote:

On Dec 28, 12:17 pm, Phillip K. [email protected] wrote:

params is a HashWithIndifferentAccess while my session
[:people_search] was just a plain old Hash. When I changed the
instantiation of session[:people_search] to
HashWithIndifferentAccess, it works.

Just for my education, would changing the keys from symbols to strings
also have worked?

Well, apparently for my education, too. Changing the keys from
symbols to strings does, in fact, work.

Why?

Phillip

On 28 Dec 2007, at 22:45, Phillip K. wrote:

HashWithIndifferentAccess, it works.

Just for my education, would changing the keys from symbols to
strings
also have worked?

Well, apparently for my education, too. Changing the keys from
symbols to strings does, in fact, work.

Because in the HashWithIndifferentAccess you get as params the keys
are, deep down on the inside, strings, so when you merged that into
your array you got a bunch of string keys but you were looking for
symbol keys.

Fred

On Dec 28, 2:45 pm, Phillip K. [email protected] wrote:

Well, apparently for my education, too. Changing the keys from
symbols to strings does, in fact, work.

Why?

What Fred said. :slight_smile:

When I saw a class called HashWithIndifferentAccess, I just had to
look into it. What a name! It’s like “I couldn’t care less whether you
access me or not, but if you do, it really doesn’t matter if it’s with
symbols or strings. It’s all the same to me. Yawn.”

///ark