これはどこにも文書化されていませんが、ここに私の問題があります。アクティブなレコードを介してクエリを実行し、「のみ」を使用すると、「順序」句が無視されます。たとえば、ブログ モデルがあります。
Blog.order('id desc')
最も高い ID を持つすべてのブログを最初に返します - 予想通りですが:
Blog.order('id desc').only(:id)
IDのみを返します(予想どおり)が、順序句は完全に無視され、最小の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")
これは正しい答えを与えます。