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*
Just for my education, would changing the keys from symbols to strings
also have worked?
///ark
Well, apparently for my education, too. Changing the keys from symbols to strings does, in fact, work.
Why?
Phillip
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.
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
What Fred said.
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