我正在运行 Rails 3.2.8 和 ruby 1.9.3p194。
我试图更好地理解究竟是如何存在的?方法在 activerecord 中起作用。我得到了一些我不明白的奇怪结果......为了清楚起见,我将在这里简化我的代码。
想象一下,我有一个包含用户列表的用户模型。
1 安迪,男
2 杰克,男
3 凯茜,女
4 迈克,男
我有男性的范围,所以:
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
为什么存在?(b)和存在?(d)返回true?是不是因为限制实际上并没有改变仍然是所有男性用户的查询,并且限制(1)只是一个显示的东西?我可以买这个,但是如果我只想存在,那么正确的查询是什么?(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
为什么这里的一切都返回假?我想要存在?(b)返回真,我完全不知道为什么它不存在。如果有人能启发我,我将不胜感激。我浏览了文档无济于事。