# Why story.votes return Array, but story.votes.create works?

**URL:** <https://www.ruby-forum.com/t/why-story-votes-return-array-but-story-votes-create-works/189047>\
**Category:** Rails\
**Created:** [May 23, 2010, 8:10am UTC](https://www.ruby-forum.com/t/why-story-votes-return-array-but-story-votes-create-works/189047 "2010-05-23T08:10:39Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![winterheat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/7993a0/32.png) [@winterheat](https://www.ruby-forum.com/u/winterheat)\
**Post date:** [May 23, 2010, 8:10am UTC](https://www.ruby-forum.com/t/why-story-votes-return-array-but-story-votes-create-works/189047/1 "2010-05-23T08:10:39Z")

</div>

In Ruby on Rails, say a Story object can “has\_many” Vote objects (a  
story is voted “hot” by many users).

So when we do a

```
s = Story.find(:first)

```

“s” is a Story object, and say

```
s.votes

```

returns “[]”  
and

```
s.votes.class

```

returns “Array”

So clearly, s.votes is an empty Array object.

At this time, when

```
s.votes.create

```

is called, it actually invokes a method of the Vote class? How come an  
Array class object can invoke a Vote class method?

---

<div class="post-metadata">

**Author:** ![winterheat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/7993a0/32.png) [@winterheat](https://www.ruby-forum.com/u/winterheat)\
**Post date:** [May 23, 2010, 10:10am UTC](https://www.ruby-forum.com/t/why-story-votes-return-array-but-story-votes-create-works/189047/2 "2010-05-23T10:10:41Z")

</div>

On May 23, 7:10 am, Jian L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> So clearly, s.votes is an empty Array object.

Actually it’s not. It’s an AssociationProxy object pretending to be an  
instance of Array

Fred

---

<div class="post-metadata">

**Author:** ![winterheat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/7993a0/32.png) [@winterheat](https://www.ruby-forum.com/u/winterheat)\
**Post date:** [May 23, 2010, 10:37am UTC](https://www.ruby-forum.com/t/why-story-votes-return-array-but-story-votes-create-works/189047/3 "2010-05-23T10:37:35Z")

</div>

Frederick C. wrote:

> On May 23, 7:10ï¿½am, Jian L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > So clearly, s.votes is an empty Array object.
> 
> Actually it’s not. It’s an AssociationProxy object pretending to be an  
> instance of Array
> 
> Fred

not like this?

irb(main):010:0\> class Foo  
irb(main):011:1\> def class  
irb(main):012:2\> return Fixnum  
irb(main):013:2\> end  
irb(main):014:1\> end  
=\> nil

irb(main):015:0\> f = Foo.new  
=\> #Foo:0x4799ce8

irb(main):016:0\> f.class  
=\> Fixnum

irb(main):017:0\>
