2013-06-05 21 views
1

我有一個名爲purchase_date的數據庫中有兩列,另一個稱爲生命期。我試圖過濾結果,以便在給定當前納稅年度時僅顯示未通過其使用期限的資產。如何使用ActiveRecord將日期列和整數列一起添加?

我已經試過

Asset.where("? < DATE_ADD(purchase_date,INTERVAL lifetime YEAR) AND purchase_date >= ?",Date.new(2012,1,1),Date.new(2012,1,1)) 

但是,後來我意識到,這將被捆綁到MySQL,如果它的工作,這是很好的,如果這只是打算用我的全部aplication工作。但是,我想要的東西是數據庫不可知的,尤其是因爲這是針對Sqlite進行測試的。與此查詢的SQLite給了我以下異常:

的ActiveRecord :: StatementInvalid:SQLite3的::的SQLException:近一輩子

我怎麼能在我的SQL語句的整列添加到日期列數據庫不可知的方式?

更新

我與Squeel發揮各地,但我不認爲它會工作。有可能檢測到適配器並將其從基於此的。

+0

也許squeel可以幫助你,但不是阿爾我恐怕 – Ven

+0

@ user1737909感謝您的輸入。我想知道,但由於某種原因,我得到了一個錯誤數量的參數例外0爲1。 –

+0

0對於1例外消失了。我認爲這是因爲我不得不在我的虛擬應用程序中生成一個初始化程序,或者我必須爲我的gemspec添加一個開發依賴項。注意:這是一個軌道引擎。 –

回答

1

爲什麼不添加:expires_at字段?您可以設置:before_save掛鉤,以確保它自動與您的:lifetime字段保持同步。

before_save :set_expiration_date 

scope :not_expired, where("expires_at > ?", DateTime.now) 

def set_expiration_date 
    return unless purchase_date.changed? || lifetime.changed? 
    self.expires_at = purchase_date + lifetime.years 
end 
相關問題