2010-11-25 76 views
0
irb(main):104:0> s = Status.all 
=> [#<Status id: 1, card_id: 1, user_id: 1, next: "2001-01-01 00:00:00", level: 1,   created_at: nil, updated_at: nil>, #<Status id: 2, card_id: 2, user_id: 1, next: "2001-01-01 00:00:00", level: 1, created_at: nil, updated_at: nil>, #<Status id: 3, card_id: 3, user_id: 1, next: "2011-01-01 00:00:00", level: 1, created_at: nil, updated_at: nil>] 
irb(main):105:0> s[2].next < Time.now 
=> false 
irb(main):106:0> s[1].next < Time.now 
=> true 
irb(main):107:0> Status.where("next < ?", Time.now) 
=> [#<Status id: 1, card_id: 1, user_id: 1, next: "2001-01-01 00:00:00", level: 1, created_at: nil, updated_at: nil>, #<Status id: 2, card_id: 2, user_id: 1, next: "2001-01-01 00:00:00", level: 1, created_at: nil, updated_at: nil>, #<Status id: 3, card_id: 3, user_id: 1, next: "2011-01-01 00:00:00", level: 1, created_at: nil, updated_at: nil>] 

我希望Status.where語句只返回2個對象。似乎where子句中的less條件不起作用。如果我將它切換到大於,則查詢返回[]。ActiveRecord條件查詢日期不工作

下一個被設置爲在遷移

日期時間爲什麼是這樣的條件,其中查詢不工作? 謝謝

+0

嘗試將Time.now更改爲Time.now.utc – Bohdan 2010-11-25 12:00:49

回答

0

你說得對,這應該工作,假設數據庫服務器有正確的時間。你在查詢什麼樣的數據庫?請更新您的問題,並使用.where()方法生成的查詢。

0

首先,你應該試圖迫使DB格式化您的查詢:Time.now.to_s(:db)

如果它不工作,使用的時區可能是一個好主意。

Time.zone.now.to_s(:db)