通过DateTime搜索ActiveRecord不起作用

时间:2011-02-10 17:00:51

标签: ruby-on-rails-3

昨天我问了一个关于这个的问题,但是这个问题很混乱,没有意义,所以我要把它归结为核心问题。

我有一个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

我在这里做错了什么?为什么我不能按日期检索记录?

2 个答案:

答案 0 :(得分:0)

这对你有用吗?

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

答案 1 :(得分:0)

我刚刚在Rails 3.0.4mysql2 0.2.6

中对此进行了测试
Entry.find_by_date(DateTime.new(2011,2,10))

作品。

话虽如此,您为什么要使用datetime列来保存日期?除了它只是一个坏主意,你可能会遇到基于rails和sql设置的某种时区问题。一些自动时区转换可以解释您正在观察的行为,但这只是一个猜测。请检查开发服务器日志,看看rails是否确实生成了您希望生成的查询。