Symbol as array index error ?

Anybody have any idea why this is throwing an error:

@monkey = params[ :lab ][ :existing_lab_data_attributes ]
raise @monkey.to_yaml

--- !map:HashWithIndifferentAccess
"133": !map:HashWithIndifferentAccess
  unit_id: "2"
  lab_desc_id: "2"
  value: "500"
"145": !map:HashWithIndifferentAccess
  unit_id: "4"
  lab_desc_id: "3"
  value: ""
...

But when I try

@monkey.delete_if{ |x| x[ :value ].blank? }

I get the error:

Symbol as array index

Any ideas what's happening, and how to delete blanks in @monkey?

Many TIA,
Craig

Because @monkey is a hash what gets yielded to you is an array, the
first element is the key (ie '133' or '145') and the second is the
value, whereas your code seems to assume that x is a hash.

Fred

Sorry for being so dense, but why does

@monkey.delete_if{ |k,v| v[ "value" ] == '' }

Throw the same error? Any idea what the proper syntax would be to
delete the element for which value is blank?

TIA,
Craig

Shouldn't do - apart from anything else you're not using any symbols
in this one, and it seems to work ok on my machine.

Fred

I haven't been able to get a strategy which deletes, but have been
able to get a building strategy:

@purple = {}
@monkey.each { |k,v| @purple[ k ] = v if !v[ :value ].blank? }

which works.

Any ideas how to get syntax working which deletes instead of builds..
because I'm obsessive compulsive :slight_smile:

TIA,
Craig