2010-07-14 45 views
0

我有一個內部方法,名爲closes_in的票據模型計算從數據庫字段start_date:date到現在剩下的時間。目前我發現的查詢是:使用方法而不是數據庫中的字段排序「查找」

@tickets = Ticket.find(:all, 
         :origin => @user.coords, 
         :order => 'distance', 

我不能只是把closes_in,因爲我得到一個錯誤。我該如何做到這一點,所以我可以使用closes_in來排序查詢,如果它是一個方法,而不是數據庫中的實際字段?

@tickets = Ticket.all(:order => "DATEDIFF(CURDATE(), start_date)") 

如果您正在使用PostgreSQL:

@tickets = Ticket.all(:order => "AGE(start_date)") 

您使用DB進行排序這樣,如果你正在使用MySQL

@tickets = Ticket.find(:all, :conditions => "foo").sort_by { |t| t.closes_in } 

回答

0

+0

謝謝,這是否適用於Postgres? – Kevin 2010-07-14 21:42:24

+0

我已經用PostgreSQL解決方案更新了答案 – 2010-07-14 23:38:57

+0

謝謝!因此,在這種情況下,我可能會使用你的解決方案,儘管它有助於瞭解jpemberthy爲其他複雜方法提供的Ruby替代方案,這些方法在DB中可能不容易計算。 – Kevin 2010-07-15 01:54:09

2

使用sort_by方法。使用ruby進行排序應該限制在一個小的數據集中,這個數據集保證很小。

+0

在這個例子中,你如何控制排序升序或降序? – Kevin 2010-07-19 22:40:41

+0

默認情況下'sort_by'方法將返回命令集合'ASC',對於'DESC'命令,您必須否定'sort_by'元素,例如:Ticket.find(:all,:conditions =>「foo」) .sort_by {| t | -t.closes_in}'(注意減號' - ')返回'@ tickets'命令'DESC'。 – jpemberthy 2010-07-20 14:27:32

相關問題