在Rails 3中通过多列有效地对行进行排序

我有一个表名称事务与以下列

created_at | debit | credit | balance | account_id 2012-2-2 02:22:22 | 3000 | 0 | 0 | 8 2012-2-2 07:22:22 | 500 | 1000 | 0 | 8 2012-2-2 09:22:22 | 0 | 8000 | 0 | 8 2012-3-3 19:17:20 | 1000 | 0 | 0 | 8 2012-3-3 04:02:22 | 0 | 8000 | 0 | 8 

在计算余额之前我需要

  • 按日期排序交易(即每日)
  • 然后按借记排序(更高的借记必须先到)

我通过account_id区分了一百万笔交易。 在这种情况下排序的有效方法是什么?

任何答案将不胜感激。

这听起来很像这个问题

 Transaction.all(:order => "created_at DESC, debit DESC") 

这种查询正是关系数据库擅长的,并且通过适当的索引,它应该对您有效。

对于特定帐户……

 Transaction.find_by_account_id(some_id, :order => "created_at DESC, debit DESC") 

如果在帐户上将其设置为正确的ActiveRecord关联,则可以在此处设置顺序,以便始终按首选顺序返回关联:

 class Account has_many :transactions, :order => "created_at DESC, debit DESC" end 

这样,只要您向帐户询问其交易,例如Account.find(12345).transactions它们就会自动返回首选排序。