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