ruby-on-rails - 按日期排序,然后按 ID,而不是按第二列排序

标签 ruby-on-rails postgresql

我按日期列然后按外键 ID 列对 Active Record 关系进行排序,但第二次排序没有生效。

recs.order('date, parent_id')
recs.order('date asc, parent_id asc')
etc.

当第一列是日期时,所有预期的排序都不起作用。它根本不会在日期内对第二列进行排序。

这按日期列而不是按 parent_id 列排序,例如:

01/01/2015 ParentB
01/01/2015 ParentB
01/01/2015 ParentA
01/01/2015 ParentB
20/06/2015 ParentA
...

您看到记录不是按带日期的 parent_id 排序的。使用 Rails 4.2.3、Postgres 9。日期属性在迁移中定义为日期类型,因此不应包含时间部分。 顺序应该是:

01/01/2015 ParentA
01/01/2015 ParentB
01/01/2015 ParentB
01/01/2015 ParentB
20/06/2015 ParentA
...

(假设 ParentA 显示 parent_id 1,ParentB 显示 parent_id 2)

最佳答案

在 Rails 4 中,你可以这样做

Model.order(column1: :asc, column2: :desc)

更多来自 Rails Guides

Client.order(orders_count: :asc, created_at: :desc)  
# OR  
Client.order(:orders_count, created_at: :desc)  
# OR  
Client.order("orders_count ASC, created_at DESC")  
# OR  
Client.order("orders_count ASC", "created_at DESC")

如果您想多次调用订单,例如在不同的上下文中,新的顺序将追加之前的顺序

Client.order("orders_count ASC").order("created_at DESC")  
# SELECT * FROM clients ORDER BY orders_count ASC, created_at DESC

关于ruby-on-rails - 按日期排序,然后按 ID,而不是按第二列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32373528/

相关文章:

ruby-on-rails - Rails 4 部分传递字符串

mysql - 设置 Ruby On Rails 时遇到问题

mysql - rails : order query by big decimal attribute

ruby-on-rails - 作为 Rails 3.0 的核心堆栈,我能期待什么?我现在需要将什么作为插件包含在内

ruby-on-rails - 查找 first_name 列不以 A-Z 开头的所有记录

postgresql - 如何删除 Azure 中 Microsoft.DBforPostgreSQL/flexibleServers 的服务关联链接

ruby-on-rails - 无法检测保存嵌套对象时的错误

sql - 在 Postgres JOIN 查询中区分 null 和 empty

ruby-on-rails - 自定义 field_with_errors

ruby-on-rails - 为 Heroku 安装 PostgreSQL gem pq