如何覆盖:在 has_many 中定义的顺序
Posted
技术标签:
【中文标题】如何覆盖:在 has_many 中定义的顺序【英文标题】:How to override :order defined in a has_many 【发布时间】:2011-05-11 06:25:03 【问题描述】:我有
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
【问题讨论】:
【参考方案1】:使用reorder:
Authors.books.reorder('name DESC')
【讨论】:
太好了!但是在任何地方都找不到它的记录;你在哪里找到的? 其实这还有效吗? github.com/rails/rails/commit/… @Christopher ~ 不是我的阅读。我可以建议(您可能已经从该帖子中推断出)接受@Jon 在下面的回答吗? 也适用于 Rails 5:api.rubyonrails.org/classes/ActiveRecord/…【参考方案2】:.reorder()
在 Rails 3.0.3 中已弃用,取而代之的是 .except(:order).order()
所以用这个:
Authors.books.except(:order).order('name DESC')
【讨论】:
我在 rails 3.1.0.rc4 上没有看到任何关于#reorder 的弃用警告,.except(:order).order()
不排除从关联中引入的 order 子句。
.except(:order).order()
确实排除在关联上定义的顺序子句。
我没有看到任何提及 reorder
在 Rails 3.2.8 中被弃用:apidock.com/rails/v3.2.8/ActiveRecord/QueryMethods/reorder
reorder
在 Rails 4.0.2 中仍然有效:apidock.com/rails/v4.0.2/ActiveRecord/QueryMethods/reorder【参考方案3】:
Author.first.books.reverse_order
【讨论】:
以上是关于如何覆盖:在 has_many 中定义的顺序的主要内容,如果未能解决你的问题,请参考以下文章