Iterate through hash children

Hello,
i have problem iterating through hashes, for example I have two
hashes:
1.
{:item => {:subitem => {data => “yes”, otherdata => “yes”}}
2.
{:item => {:subitem => [{data => “yes”, otherdata => “yes”},{data =>
“no”, otherdata => “yes”}]}

I wish with in view iterate through hash and draw table, but using
hash.each function, in first example rails iterate through data and
other data, but in second case through {},{} not data and other data.

Is there any solution how simply solve this problem?

On 7 January 2011 22:20, Raitis [email protected] wrote:

hash.each function, in first example rails iterate through data and
other data, but in second case through {},{} not data and other data.

In the second case, since subitem is an array, you will have to
iterate through the array and for each element iterate through the
hash. If you are doing that already show us the code (strip out
everything that is not required first so that we can concentrate on
the important stuff).

Colin

Colin, that’s means I always need to check hash value data and
transform it or use another each cycle?

Currently in view I have simple .each iteration:
http://pastie.org/1439787

This will work great for second hash, when drawing table.

Raitis

On 8 January 2011 10:49, Raitis [email protected] wrote:

Colin, that’s means I always need to check hash value data and
transform it or use another each cycle?

Please don’t top post, it makes it difficult to follow the thread.
Insert your reply at the appropriate points in the previous message.
Thanks.

Currently in view I have simple .each iteration:
http://pastie.org/1439787

Since that is only six lines you could easily have inserted it inline:

<% @search_results[:item][:subitem].each  do |key, value| %>
  <tr>
    <td><%= key %></td>
    <td><%= value %></td>
  </tr>
<% end %>

Think about the code. If @search_results[:item][:subitem] is a hash
as in your first example then this is using
Hash.each do |key, value|
which is what you want. If it is in fact an array, as in your second
example this is going to use
Array.each do |key, value|
which is meaningless I think. Hopefully you know whether it is an
array or not and can use a nested each block to iterate through the
array. Perhaps you can make it always an array which sometimes only
has one entry to simplify the code.

Colin