0

我的 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. 这里发生了什么?

4

2 回答 2

4

这是在 Rails 中实现关联的方式。它们是惰性代理对象。

查看文档以获取更多信息:https ://github.com/rails/rails/blob/master/activerecord/lib/active_record/associations/collection_proxy.rb#L25

于 2012-07-09T13:45:47.483 回答
1

Ruby 有一个单例方法的概念。这意味着对象可以更改其类定义的行为。读这个

于 2012-07-09T13:41:34.720 回答