2015-07-11 13 views
5

Załóżmy, że mam modele Tematy i posty, w których temat has_many: posty i post belongs_to: topic. Mam już pewne rzeczy w mojej bazie danych w tym momencie.Skąd ActiveRecord :: Associations :: CollectionProxy otrzymujemy metodę instancji .each?

Jeśli pójdę do konsoli i wpisz szyn

Topic.find(1).posts 

wierzę wrócić obiekt CollectionProxy.

=> #<ActiveRecord::Associations::CollectionProxy [#<Post id:30, ......>]> 

Mogę zadzwonić .each w tym celu, aby uzyskać obiekt Enumerator.

=> #<Enumerator: [#<Post id: 30, ......>]:each> 

Jestem zdezorientowany, w jaki sposób CollectionProxy obsługuje .each. Zdaję sobie sprawę, że jest on w pewnym momencie dziedziczony, ale czytałem dokumenty API i nie wyjaśniają wyraźnie, z czego dziedziczy CollectionProxy, chyba że brakuje mi czegoś oczywistego.

This page nie wydaje mi się, że wiele mi mówi, podobnie jak this page.

Odpowiedz

4

Dlaczego nie spytasz, skąd pochodzi?

> ActiveRecord::Associations::CollectionProxy.instance_method(:each).owner 
=> ActiveRecord::Delegation 

UnboundMethod#owner metoda:

Zwraca klasę lub moduł, który definiuje metody.

tak each pochodzi z ActiveRecord::Delegation. A jeśli spojrzeć na ActiveRecord::Delegation, you'll see this:

delegate ..., :each, ... , to: :to_a 

tak each dodatkowo punted do to_a.each.

Powiązane problemy