1

我在任何地方都找不到这个文档,但这是我的问题:当我通过活动记录查询并使用“only”时,“order”子句被忽略。例如我有一个博客模型:

Blog.order('id desc')

首先返回所有具有最高 ID 的博客 - 正如预期的那样,但是:

Blog.order('id desc').only(:id)

仅返回 id(如预期的那样)但 order 子句被完全忽略,最小的 id 首先出现。

我已经用 Ruby 1.9.3p327 以及 Rails 4.0.0.beta1 和 Rails 3.2.13 对此进行了测试,我得到了相同的结果。

这是功能还是错误?对我来说这是一个错误,因为 Rails 工作人员大肆宣扬 find_by_sql 并不是真正需要的,但在这种情况下它是:

Blog.find_by_sql("select id from blogs order by id desc")

这给出了正确的答案。

4

1 回答 1

1

尝试使用pluck而不是only. only用于覆盖先前形成的查询链的部分。正如文档所示:

Post.where('id > 10').limit(20).order('id desc').only(:order, :where)

结果是:

SELECT * FROM posts WHERE id > 10 ORDER BY id DESC

这是因为limit修改将被忽略,因为传递给的列表only不包括:limit.

更新

如果您需要返回实际模型对象而不是 id 数组,请使用select

Blog.order('id desc').select('id')
于 2013-04-03T19:34:21.150 回答