2012-05-18 23 views
8

這個錯誤是關於什麼的?我正在運行標準查詢,如下所示:警告:Time#succ已過時;使用時間+ 1

time_range = (1.month.ago.beginning_of_month..1.month.ago.end_of_month) 


Feed.find(:all, :conditions => ['created_at = ? AND id not in (?)', time_range, [1,2,3]]).count 

任何想法?謝謝

+0

什麼版本的Ruby和Rails? – echristopherson

回答

20

我有這個問題,解決辦法是增加「TO_DATE」,使其日子遍歷的@echristopherson評論,像這樣:

time_range = (1.month.ago.beginning_of_month.to_date..1.month.ago.end_of_month.to_date) 
+0

這解決了我的問題。謝謝Flaviu – sadaf

4

我認爲你的問題是你在做created_at = ?, time_range,time_range不是一個特定的值,而an =期望一個特定的值。無法準確解釋出現這種錯誤的原因,但可以爲您解決問題。

做到這一點,而不是,我想它和偉大工程

1.9.3-p125 :014 > time_range = (1.month.ago.beginning_of_month..1.month.ago.end_of_month) 
=> Sun, 01 Apr 2012 00:00:00 UTC +00:00..Mon, 30 Apr 2012 23:59:59 UTC +00:00 
1.9.3-p125 :015 > Post.where(:created_at => time_range).where('id not in (?)', [1,2,3]).count 
    (0.3ms) SELECT COUNT(*) FROM "posts" WHERE ("posts"."created_at" BETWEEN '2012-04-01 00:00:00.000000' AND '2012-04-30 23:59:59.999999') AND (id not in (1,2,3)) 
=> 0 

UPDATE

不直接相關的問題,但你應該把這些條件與語義範圍等等你會有Feed.from_last_month和類似Feed.not_with_ids([1,2,3])

併爲您的闕RY你會做

Feed.from_month.not_with_ids([1,2,3]).count 

有關警告說明檢查以下

+0

Rails是否足夠聰明,可以在使用':created_at =>'時解壓'Range's,但是當'created_at'屬於原始SQL時呢? – echristopherson

+0

就是這樣,在第一種情況下,你讓Rails發揮他的魔力,第二種方式是明確地說出要在查詢中放置什麼;)讓Rails爲自己的利益做他的魔力。 –

+3

該警告的基本原因是迭代超過'範圍'使用'#succ'每次都到達下一個項目;並從Ruby 1.9.2開始'Time#succ'被標記爲廢棄,因爲真正的時間確實沒有離散的後繼者; 1.9.2之前的實現只是使用將時間劃分爲秒的任意約定。當將'Range'解包到'Array'中時,這就是Rails試圖在這裏做的事情。 – echristopherson

相關問題