This is the root class of all association proxies:
AssociationProxy BelongsToAssociation HasOneAssociation BelongsToPolymorphicAssociation AssociationCollection HasAndBelongsToManyAssociation HasManyAssociation HasManyThroughAssociation HasOneThroughAssociation
Association proxies in Active Record are middlemen between the object that holds the association, known as the @owner, and the actual associated object, known as the @target. The kind of association any proxy is about is available in @reflection. That’s an instance of the class ActiveRecord::Reflection::AssociationReflection.
For example, given
class Blog < ActiveRecord::Base has_many :posts end blog = Blog.find(:first)
the association proxy in blog.posts has the object in blog as @owner, the collection of its posts as @target, and the @reflection object represents a :has_many macro.
blog.posts.class # => Array
is computed directly through SQL and does not trigger by itself the instantiation of the actual post records.