2011-02-10 86 views
1

昨天我問了一個關於這個問題,但它被混淆了,沒有意義,所以我要把它歸結爲核心問題。通過DateTime搜索ActiveRecord不起作用

我有一個entries表。保存新記錄時,entries_controller會將時間添加到date列中,該列記錄爲日期時間。在new方法,我宣佈一個新的DateTime像這樣:

@entry.date = DateTime.new(params[:year].to_i, params[:month].to_i, params[:day].to_i) 

然後我把它作爲與formtastic一個隱藏字段:

<%= f.input :date, :as => :hidden %> 

一旦條目被保存到數據庫中,日期字段看起來像2011-02-10 00:00:00。一切工作都按計劃進行,但當我試圖通過查詢date字段來檢索該條目時,我得到了nil

我已經試過:

search_date = DateTime.new(2011,2,10) 
Entry.find_by_date(search_date) 
=> nil 

我甚至試過用字符串,這沒有任何意義,因爲它是一個時間字段進行搜索。

search_time = '2010-02-10 00:00:00' 
Entry.find_by_date(search_date) 
=> nil 

我在做什麼錯在這裏?爲什麼我不能按日期檢索記錄?

回答

0

這會適合你嗎?

Entry.where("date = #{search_date}") 
+0

沒有。這樣會拋出大量錯誤,並將其更改爲:`Entry.where(「date ='#{search_date}'」)`返回nil – bjork24 2011-02-10 18:46:20

+0

奇怪的是,我在我自己的應用程序中測試了它,並且似乎工作正常。你能打印堆棧跟蹤嗎? – ferdyh 2011-02-11 09:03:59

0

我只是在Rails 3.0.4mysql2 0.2.6

Entry.find_by_date(DateTime.new(2011,2,10)) 

工程測試這一點。

話雖如此,爲什麼你使用日期時間列來保存日期?除了它只是一個壞主意,你可能會遇到一些基於你的rails和sql設置的時區問題。一些自動時區轉換可以解釋你正在觀察的行爲,但這只是一個猜測。請檢查開發服務器日誌以查看rails是否確實生成了您希望它生成的查詢。