シナリオ例: モデル Workerbelongs_to
モデル Bucket。
次のクエリを参照してください。
1.9.3p194 :045 > Worker.where(bucket_id: Bucket.first).count
(0.7ms) SELECT COUNT(*) FROM "workers" WHERE "workers"."bucket_id" = 1
=> 38
1.9.3p194 :046 > Worker.where(bucket_id: Bucket.first.id).count
(0.7ms) SELECT COUNT(*) FROM "workers" WHERE "workers"."bucket_id" = 1
=> 38
1.9.3p194 :047 > Worker.new bucket_id: Bucket.first
=> #<Worker id: nil, email: nil, created_at: nil, updated_at: nil, bucket_id: nil>
1.9.3p194 :048 > Worker.new bucket_id: Bucket.first.id
=> #<Worker id: nil, email: nil, created_at: nil, updated_at: nil, bucket_id: 2>
ご覧のとおり、where
関数の場合、 などのインスタンスを渡すBucket.first
と、正確な の代わりに機能しますid
。したがって、関数でも機能すると思われるでしょうnew
。代わりに、静かに失敗します!
なぜこのように機能するのですか?