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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何覆盖:has_many中定义的顺序相关的知识,希望对你有一定的参考价值。

我有

class Authors 
has_many :books, :order => 'name ASC'

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

Authors.books.order('name DESC')

但结果是

SELECT * FROM .... ORDER BY name ASC, name DESC

结果以名称排序ASC返回

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

使用Rails 3.0.3

答案

使用reorder

Authors.books.reorder('name DESC')
另一答案

.reorder()在Rails 3.0.3中被弃用,有利于.except(:order).order()

所以使用这个:

Authors.books.except(:order).order('name DESC')
另一答案
Author.first.books.reverse_order

以上是关于如何覆盖:has_many中定义的顺序的主要内容,如果未能解决你的问题,请参考以下文章

如何通过关联为 has_many 定义工厂

如何通过rails中的关联定义has_many

如何在 Ruby on Rails 中通过关联订购 has_many?

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

Ecto - 如何通过特定查询获取“has_many”

如何知道 Fragment 何时变得不可见