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

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?

On May 23, 7:10 am, Jian L. [email protected] 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

Frederick C. wrote:

On May 23, 7:10�am, Jian L. [email protected] 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>