假设我有模型主题和帖子,其中一个主题有很多:帖子,一个帖子属于:主题。现在我的数据库里已经有一些东西了。
如果我进入Rails控制台并键入
Topic.find(1).posts
我想我得到了一个collectionproxy对象。
=> #<ActiveRecord::Associations::CollectionProxy [#<Post id:30, ......>]>
我可以调用。每一个都可以得到一个枚举器对象。
=> #<Enumerator: [#<Post id: 30, ......>]:each>
我很困惑CollectionProxy是如何处理的。我意识到它在某种程度上是继承的,但我一直在阅读api文档,它们并不能很清楚collectionproxy是从什么地方继承的,除非我遗漏了一些明显的东西。
This page似乎没有告诉我太多,而且this page也没有。
最佳答案
ActiveRecord::Associations::CollectionProxy
is inherited from Relation
和Relation
将each
和许多其他方法转发到to_a
。
从activerecord/lib/active_record/relation/delegation.rb#L45
委托:to_xml,:to_yaml,:length,:collect,:map,:each,:all?包括:,:to-ary,:join,to::to-a
有关delegate
如何工作的详细说明,请参见Understanding Ruby and Rails: Delegate。