Rails 3.2.8 と ruby 1.9.3p194 を実行しています。
がどのように存在するのかを正確に理解しようとしていますか? メソッドはアクティブレコードで機能します。理解できない奇妙な結果が得られます...わかりやすくするために、ここでコードを単純化します。
ユーザーのリストを持つ User モデルがあるとします。
1 アンディ、m
2 ジェイク、m
3 キャシー、f
4 マイク、m
男性用のスコープがあるので、次のようにします。
User.male => [#< User id: 1, name: Andy, gender: male>, #< User id: 2, name: Jake, gender: male>, #< User id: 4, name: Mike, gender: male>]
わかった。今:
a = User.find 1 => #<User id: 1, name: Andy, gender: male>
b = User.find 2 => #<User id: 2, name: Jake, gender: male>
c = User.find 3 => #<User id: 3, name: Cathy, gender: female>
d = User.find 4 => #<User id: 4, name: Mike, gender: male>
User.male.exists?(a) => true
User.male.exists?(b) => true
User.male.exists?(c) => false
User.male.exists?(d) => true
それは理にかなっています。でも:
User.male.limit(1) => [#<User id: 1, name: Andy, gender: male>]
User.male.limit(1).exists?(a) => true
User.male.limit(1).exists?(b) => true
User.male.limit(1).exists?(c) => false
User.male.limit(1).exists?(d) => true
exists?(b) と exists?(d) が true を返すのはなぜですか? 制限は、まだすべて男性ユーザーであるクエリを実際には変更せず、 limit(1) は単に表示されるためですか? これを購入することはできますが、exists?(a) が true を返し、その他すべてが false を返すようにしたい場合、正しいクエリは何でしょうか?
さて、これは本当に私を完全に混乱させます:
User.male.limit(1).offset(1) => [#<User id: 2, name: Jake, gender: male>]
User.male.limit(1).offset(1).exists?(a) => false
User.male.limit(1).offset(1).exists?(b) => false
User.male.limit(1).offset(1).exists?(c) => false
User.male.limit(1).offset(1).exists?(d) => false
ここですべてが false を返すのはなぜですか? exists?(b) が true を返すようにしたいのですが、そうでない理由がまったくわかりません。誰かが私を啓発することができれば、私は非常に感謝しています. ドキュメントを調べても無駄でした。