Rails命令不能仅使用

时间:2013-04-03 19:28:03

标签: ruby-on-rails rails-activerecord

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

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")

给出正确的答案。

1 个答案:

答案 0 :(得分:1)

尝试使用pluck代替onlyonly用于覆盖先前形成的查询链的部分。正如the docs所示:

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')