如何覆盖:has_many中定义的顺序

Chr*_*her 42 activerecord ruby-on-rails arel

我有

class Authors 
has_many :books, :order => 'name ASC'
Run Code Online (Sandbox Code Playgroud)

我试图查询按名称DESC排序的所有书籍

Authors.books.order('name DESC')
Run Code Online (Sandbox Code Playgroud)

但结果是

SELECT * FROM .... ORDER BY name ASC, name DESC
Run Code Online (Sandbox Code Playgroud)

结果以名称排序ASC返回

有没有办法删除关联中的原始订单或覆盖它?或者在关系中指定一个坏主意的订单?

使用Rails 3.0.3

Ari*_*jan 94

使用重新排序:

Authors.books.reorder('name DESC')
Run Code Online (Sandbox Code Playgroud)

  • @Christopher~不是我的阅读.我可以建议(你可能已经从那篇文章中推断出来)接受@ Jon的答案如下吗? (3认同)
  • 谢谢,也适用于Rails 4.0.1 :) (3认同)
  • 实际上,这仍然有效吗?https://github.com/rails/rails/commit/e0b76d6151821527f16b3f163abde3ebea1b2a50 (2认同)

小智 35

.reorder() 在Rails 3.0.3中已经弃用了赞成 .except(:order).order()

所以使用这个:

Authors.books.except(:order).order('name DESC')
Run Code Online (Sandbox Code Playgroud)

  • `reorder`在Rails 4.0.2中仍然有效:http://apidock.com/rails/v4.0.2/ActiveRecord/QueryMethods/reorder (4认同)
  • 在Rails 3.2.8中我没有看到任何提及`reorder`的问题:http://apidock.com/rails/v3.2.8/ActiveRecord/QueryMethods/reorder (3认同)
  • 我在Rails 3.1.0.rc4上没有看到关于#reorder的任何过时警告,并且`.except(:order).order()`并不排除从关联中拉入的order子句。 (2认同)
  • 这有效,但reorder()更好,并且reorder()不被弃用... (2认同)