# Hash with key and value from ActiveRecord?

**URL:** <https://www.ruby-forum.com/t/hash-with-key-and-value-from-activerecord/163843>\
**Category:** Rails\
**Created:** [March 25, 2009, 12:46pm UTC](https://www.ruby-forum.com/t/hash-with-key-and-value-from-activerecord/163843 "2009-03-25T12:46:46Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![cojones](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9f8e36/32.png) [@cojones](https://www.ruby-forum.com/u/cojones)\
**Post date:** [March 25, 2009, 12:46pm UTC](https://www.ruby-forum.com/t/hash-with-key-and-value-from-activerecord/163843/1 "2009-03-25T12:46:46Z")

</div>

Heya,

I think I have thinking barrier. I just want a simple hash out of an  
ActiveRecord.

@attributes = Attribute.find\_all\_by\_character\_id(@character).hash {  
|u| [u.name, u.value] }

and I would like to access it like

@attributes[:health]

but it doesn’t work. Anyone can help me out with that?

---

<div class="post-metadata">

**Author:** ![cojones](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9f8e36/32.png) [@cojones](https://www.ruby-forum.com/u/cojones)\
**Post date:** [March 25, 2009, 1:32pm UTC](https://www.ruby-forum.com/t/hash-with-key-and-value-from-activerecord/163843/2 "2009-03-25T13:32:28Z")

</div>

Try this:

@attributes = Hash[\*Attribute.find\_all\_by\_character\_id(@character).map  
{ |a| [a.name, a.value] }.flatten]

On Mar 25, 7:46 am, Heinz S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![cojones](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9f8e36/32.png) [@cojones](https://www.ruby-forum.com/u/cojones)\
**Post date:** [March 25, 2009, 1:34pm UTC](https://www.ruby-forum.com/t/hash-with-key-and-value-from-activerecord/163843/3 "2009-03-25T13:34:14Z")

</div>

On Mar 25, 11:46 am, Heinz S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> @attributes = Attribute.find\_all\_by\_character\_id(@character).hash {  
> |u| [u.name, u.value] }
> 
> and I would like to access it like
> 
> @attributes[:health]

> but it doesn’t work. Anyone can help me out with that?

The keys of your hash are strings, not symbols. (be careful with an  
instance variable called @attributes if this is in an instance method

- you would overwrite activerecord’s instance variable of the same  
name)

Fred

---

<div class="post-metadata">

**Author:** ![cojones](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9f8e36/32.png) [@cojones](https://www.ruby-forum.com/u/cojones)\
**Post date:** [March 25, 2009, 1:48pm UTC](https://www.ruby-forum.com/t/hash-with-key-and-value-from-activerecord/163843/4 "2009-03-25T13:48:30Z")

</div>

I just renamed @attributes but using ‘health’ instead of :health doesn’t  
really help…

---

<div class="post-metadata">

**Author:** ![cojones](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9f8e36/32.png) [@cojones](https://www.ruby-forum.com/u/cojones)\
**Post date:** [March 25, 2009, 1:43pm UTC](https://www.ruby-forum.com/t/hash-with-key-and-value-from-activerecord/163843/5 "2009-03-25T13:43:40Z")

</div>

I actually don’t get the OP’s use of the hash method in this context:  
[http://www.ruby-doc.org/core/classes/Array.html#M002182](http://www.ruby-doc.org/core/classes/Array.html#M002182)

It seems that it’s just computing the hash, and the block passed is  
just being silently ignored…  
Heniz, using your code what’s the output of @attributes.inspect and  
@attributes.class.name?

On Mar 25, 8:33 am, Frederick C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![cojones](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9f8e36/32.png) [@cojones](https://www.ruby-forum.com/u/cojones)\
**Post date:** [March 25, 2009, 2:02pm UTC](https://www.ruby-forum.com/t/hash-with-key-and-value-from-activerecord/163843/6 "2009-03-25T14:02:25Z")

</div>

On Mar 25, 12:48 pm, Heinz S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> I just renamed @attributes but using ‘health’ instead of :health doesn’t  
> really help…

There’s also what Harold said - that hash method isn’t doing what you  
think it is.

Fred

---

<div class="post-metadata">

**Author:** ![cojones](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9f8e36/32.png) [@cojones](https://www.ruby-forum.com/u/cojones)\
**Post date:** [March 25, 2009, 2:19pm UTC](https://www.ruby-forum.com/t/hash-with-key-and-value-from-activerecord/163843/7 "2009-03-25T14:19:13Z")

</div>

Frederick C. wrote:

> On Mar 25, 12:48ï¿½pm, Heinz S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> wrote:
> 
> > I just renamed @attributes but using ‘health’ instead of :health doesn’t  
> > really help…
> 
> There’s also what Harold said - that hash method isn’t doing what you  
> think it is.
> 
> Fred

Oh yeah, I overlooked his first post. Works like a charm, thanks 🙂
