我有一个导致ActiveRecord :: Relation的查询:
> query.class
=> ActiveRecord::Relation
通常这两个表达式产生相同的结果,但我遇到的问题是它们产生不同的结果:
query.pluck(:id).uniq.sort
query.map(&:id).uniq.sort
例如:
[14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 321, 322, 323, 324, 325]
VS
[310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325]
有问题的查询是分页查询。我有116个样本用户,查询是:
"SELECT users.* FROM users WHERE users.company_id = 2 LIMIT 25 OFFSET 100"
我不清楚为什么会出现这种情况,或者我应该寻找什么。有关他们为何可能有所不同的任何建议吗?
The documentation表明它们应该是等效的。
答案 0 :(得分:2)
您的查询:
SELECT users.* FROM users WHERE users.company_id = 2 LIMIT 25 OFFSET 100
没有ORDER BY子句,因此您没有理由期望任何特定的25行返回。请记住,表中的行没有自然顺序,因此如果您需要特定订单,则始终需要明确指定订单。
添加ORDER BY,您应该从pluck
和map
方法获得相同的结果。