[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

hash in hash, iterating the members

Depili

1/12/2006 10:27:00 AM

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.

5 Answers

David Vallner

1/12/2006 10:50:00 AM

0

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

On Thu, 12 Jan 2006 11:28:06 +0100, Depili <vpalmu@aski.hut.fi> wrote:

> 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" = {....

Depili

1/12/2006 3:56:00 PM

0

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?

David Vallner

1/12/2006 7:41:00 PM

0

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


Depili

1/13/2006 12:12:00 AM

0

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

David Vallner

1/13/2006 3:06:00 AM

0

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