Jak to jest zrobione ActiveRecord

Mam pytanie które spokoju mi nie daje.

class User < ActiveRecord::Base has_many :events end
Jak to jest, że metodaUser.new.events => []
zwraca tablicę, ale można na niej wykonać metodę new która która zwróci obiekt klasy Event

User.new.events.new

Przeglądałem kod ale nie mogę znaleźć jaki tam jest patent, że to działa.

Poczytaj o AssociationProxy.

[quote=pski]Jak to jest, że metodaUser.new.events => []
zwraca tablicę,[/quote]
Nie zwraca tablicy tylko coś, dla czego metoda inspect zwraca “[]”. Niekoniecznie jest to tablica.
Tak jak pisze lotus, jest to obiekt klasy AssociationProxy.

Plus jest to takie proxy które proxuje tak dużo, że nawet jak się spytasz o nazwę klasy to się dowiesz, że to Array chociaż to wcale nie jest Array.