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

これは、アソシエーションがレールに実装される方法です。それらは遅延プロキシ オブジェクトです。

これに関する詳細については、ドキュメントをご覧ください: 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 に答える