Forum: Ruby hash in hash, iterating the members

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
2b7da852af2e7c02e05291a1be7c8fd2?d=identicon&s=25 Depili (Guest)
on 2006-01-12 11:28
(Received via mailing list)
I'm quite new to ruby and I'm learning with ruby on rails, but I have
hit a brick wall, because I want to parse several fields from a web
form which give the same data in a loop and maintaining the order from
the web form.

So I have a form with fields like:

Data[1][Name] Data[1]Notes .....
Data[2][Name] Data[2]Notes .....

and the params hash looks like

{"Data" = {"1" = {"Name" = "foo", "Notes"="bar"}, "2" = {.....

I can access the fields easily when the keynames are strings, but with
numbered keys params[:Data][1] doesn't work. Also params[Data].each do
|data| leads to errors,,,

I would like to get a way of accessing the hashes inside data for
creating new database entries in rails.
430ea1cba106cc65b7687d66e9df4f06?d=identicon&s=25 David Vallner (Guest)
on 2006-01-12 11:51
(Received via mailing list)
I suppose you've used PHP before? In Ruby, strings and numbers are NOT
equivalent in any context I can think of. at least by default. More
notably:

irb(main):001:0> 1.hash
=> 3
irb(main):002:0> "1".hash
=> 50
irb(main):003:0> :Data.hash
=> 929038
irb(main):004:0> "Data".hash
=> 141011718

As you can see, the number 1 has a different hash code than the string
"1", same forthe symbol :Data and the string "Data".

Make a simple rails view that will dump params as text and check if you
are indeed indexing the data by the actual keys in the hash.

David Vallner
2b7da852af2e7c02e05291a1be7c8fd2?d=identicon&s=25 Depili (Guest)
on 2006-01-12 17:00
(Received via mailing list)
I can access the data with the :Data keys, but question remains, when I
have keys :1..:10 for example, how do I access them in a loop?
430ea1cba106cc65b7687d66e9df4f06?d=identicon&s=25 David Vallner (Guest)
on 2006-01-12 20:42
(Received via mailing list)
On Thu, 12 Jan 2006 16:58:04 +0100, Depili <vpalmu@aski.hut.fi> wrote:

> I can access the data with the :Data keys, but question remains, when I
> have keys :1..:10 for example, how do I access them in a loop?
>
>


Hmm, this still seems strange, AFAIK, Rails sanitizes form input. Are
you
sure you aren't circumventing what the Rails framework provides? A more
concise approach would be to let ActiveRecord do its magic if possible.

Anyhoo, you can still iterate over the data if for some strange reason
the
request parameter parser uses symbols like that as keys, e.g.:

for i in (1..10)
   do_stuff_with(params[:Data][i.to_s.to_sym])
end

Anyways, more context wouldn't hurt, but if the above does the trick,
fine
as well.

David Vallner
2b7da852af2e7c02e05291a1be7c8fd2?d=identicon&s=25 Depili (Guest)
on 2006-01-13 01:15
(Received via mailing list)
That did the trick, thanks.

I'm pretty sure that I'm not overidin rails in any way, I just have a
form temlate and I get the data from it by http post method and rails
parses the data into the params hash table.

But this will get me going forward :)
430ea1cba106cc65b7687d66e9df4f06?d=identicon&s=25 David Vallner (Guest)
on 2006-01-13 04:07
(Received via mailing list)
On Fri, 13 Jan 2006 01:13:09 +0100, Depili <vpalmu@aski.hut.fi> wrote:

> That did the trick, thanks.
>
> I'm pretty sure that I'm not overidin rails in any way, I just have a
> form temlate and I get the data from it by http post method and rails
> parses the data into the params hash table.
>
> But this will get me going forward :)
>
>


What I was thinking is if you shouldn't use ActiveRecords to store the
data and let it sort out the data types - I smell lack of data model
definition / normalization a bit. Of course, if it's not persitent data,
it's not a good approach.

David Vallner
This topic is locked and can not be replied to.