2013-10-25 104 views
2

我試圖創建一個範圍invoice。這是用於老化的觀點。使用日期的軌道範圍

發票日期爲invoice.invdate

這沒有工作 - 它認爲DateTime是一個表:

scope :thirtydays, where("DateTime.now - DATE(invdate) < ?", 31) 

這是皮克錯誤:

missing FROM-clause entry for table "datetime" 

回答

1

的問題是你把Ruby代碼爲其中內字符串子句而不是使用字符串插值。

我明白你正在嘗試做什麼,但我認爲你應該讓Rails爲你處理日期查找。

您可以用下面的簡化代碼:

class Invoice < ActiveRecord::Base 
    def self.thirtydays 
    where(invdate: 31.days.ago..DateTime.now) 
    end 
end 

31.days.ago..DateTime.now將生成一個具有日起31天前開始,以今天的日期爲終點的範圍對象。 Rails將根據您的數據庫平臺(在這種情況下爲Postgresql)處理SQL日期範圍調用。

它會產生類似於SQL語句:

SELECT `invoices`.* FROM `invoices` WHERE (`invoices`.`invdate` BETWEEN '2013-09-24 22:00:00' AND '2013-10-25 22:00:00') 
+0

感謝您的回答! – Reddirt