按日期排序然后是ID,而不是按第二列排序

时间:2015-09-03 10:48:00

标签: ruby-on-rails postgresql

我按日期列排序Active Record关系,然后是外键id列,但第二个排序不会生效。

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)

1 个答案:

答案 0 :(得分: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