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?

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