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?
In your case,
.votesis not returning anArray, it’s returning a specialAssociationobject.The reason it looks like an
Arrayis because the association object delegates all of its methods except for the dynamic ones likecreateto an array object it holds internally. And, this means that when you call.classon the object, that also gets delegated to the Array object.