# Symbol as array index error?

**URL:** <https://www.ruby-forum.com/t/symbol-as-array-index-error/185370>\
**Category:** Rails\
**Created:** [March 18, 2010, 10:42pm UTC](https://www.ruby-forum.com/t/symbol-as-array-index-error/185370 "2010-03-18T22:42:02Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Dudebot](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/e495f1/32.png) [@Dudebot](https://www.ruby-forum.com/u/Dudebot)\
**Post date:** [March 18, 2010, 10:42pm UTC](https://www.ruby-forum.com/t/symbol-as-array-index-error/185370/1 "2010-03-18T22:42:02Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Dudebot](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/e495f1/32.png) [@Dudebot](https://www.ruby-forum.com/u/Dudebot)\
**Post date:** [March 18, 2010, 11:00pm UTC](https://www.ruby-forum.com/t/symbol-as-array-index-error/185370/2 "2010-03-18T23:00:11Z")

</div>

On Mar 18, 9:40 pm, Dudebot [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> “145”: !map:HashWithIndifferentAccess  
> unit\_id: “4”  
> lab\_desc\_id: “3”  
> value: “”  
> …
> 
> But when I try
> 
> @monkey.delete\_if{ |x| x[:value].blank? }

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

---

<div class="post-metadata">

**Author:** ![Dudebot](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/e495f1/32.png) [@Dudebot](https://www.ruby-forum.com/u/Dudebot)\
**Post date:** [March 19, 2010, 1:38am UTC](https://www.ruby-forum.com/t/symbol-as-array-index-error/185370/3 "2010-03-19T01:38:46Z")

</div>

On Mar 18, 4:59 pm, Frederick C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

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

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

---

<div class="post-metadata">

**Author:** ![Dudebot](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/e495f1/32.png) [@Dudebot](https://www.ruby-forum.com/u/Dudebot)\
**Post date:** [March 19, 2010, 2:09am UTC](https://www.ruby-forum.com/t/symbol-as-array-index-error/185370/4 "2010-03-19T02:09:12Z")

</div>

On Mar 19, 12:37 am, Dudebot [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

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

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

---

<div class="post-metadata">

**Author:** ![Dudebot](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/e495f1/32.png) [@Dudebot](https://www.ruby-forum.com/u/Dudebot)\
**Post date:** [March 19, 2010, 2:20am UTC](https://www.ruby-forum.com/t/symbol-as-array-index-error/185370/5 "2010-03-19T02:20:19Z")

</div>

On Mar 18, 8:07 pm, Frederick C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> On Mar 19, 12:37 am, Dudebot [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:\> 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?
> 
> 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.

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 🙂

TIA,  
Craig
