我的ActiveRecord并没有说实话。亲眼看看:
> User.posts.class
=> Array
> User.posts.all.class
=> Array
> a = Array.new
> a.class
=> Array
> a.all
NoMethodError: undefined method `all' for []:Array
没有Array#all
方法,因此User.posts
不能是Array
。这是怎么回事?
答案 0 :(得分:4)
这是在rails中实现关联的方式。它们是懒惰的代理对象。
请查看有关此内容的更多信息的文档:https://github.com/rails/rails/blob/master/activerecord/lib/active_record/associations/collection_proxy.rb#L25
答案 1 :(得分:1)
Ruby有一个单例方法的概念。这意味着对象可以更改其类定义的行为。阅读this。