レールのバージョン: 3.1.10
やあ。user
モデルとのhas_many
関係を持つモデルがありaccount
ます。1 人の特定のユーザーに対して、5 つのアカウントがあります。ただし、関連するモデルを要求すると、返されるのは 3 つだけです。
> user.accounts.class
=> Array
> user.accounts.count
(0.2ms) SELECT COUNT(*) FROM "accounts" WHERE "accounts"."user_id" = 1
=> 5
> user.accounts.all.class
=> Array
> user.accounts.all.count
=> 3
user.accounts.all
への呼び出しでデータベース クエリが生成されないため、ActiveRecord のキャッシュが行われていると考えられます。しかし、本当に困惑するのは、user.accounts.class
とuser.accounts.all.class
がどちらも に等しいにもかかわらず、このメソッドArray
を呼び出すと:count
2 つのまったく異なることが行われることです。
私は ruby にはかなり慣れていませんが、オブジェクトのメソッドをオンザフライで定義することで魔法のようなことができることは知っています。それがここで起こっていることですか?ActiveRecordArray
は最初のケースで私に変更を与えていますか?