为什么不使用这两种查询方式获得相同的结果?

时间:2014-03-20 17:59:42

标签: ruby-on-rails ruby activerecord rails-activerecord

我有一个导致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表明它们应该是等效的。

1 个答案:

答案 0 :(得分:2)

您的查询:

SELECT users.* FROM users WHERE users.company_id = 2 LIMIT 25 OFFSET 100

没有ORDER BY子句,因此您没有理由期望任何特定的25行返回。请记住,表中的行没有自然顺序,因此如果您需要特定订单,则始终需要明确指定订单。

添加ORDER BY,您应该从pluckmap方法获得相同的结果。