hash in hash, iterating the members

D

Depili

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.
 
D

David Vallner

I suppose you've used PHP before? In Ruby, strings and numbers are NOT =20
equivalent in any context I can think of. at least by default. More =20
notably:

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

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

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

David Vallner
 
D

Depili

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?
 
D

David Vallner

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=
=20
sure you aren't circumventing what the Rails framework provides? A more =20
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 th=
e =20
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, fin=
e =20
as well.

David Vallner
 
D

Depili

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 :)
 
D

David Vallner

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 =20
data and let it sort out the data types - I smell lack of data model =20
definition / normalization a bit. Of course, if it's not persitent data, =
=20
it's not a good approach.

David Vallner
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top