Rails 2.1.1 setting datetime to nil at 00:00:00

Hello,

There appears to be a strange bug in Rails 2.1.1 where if I set a datetime field to YYYY-MM-DD 00:00:00 (using TimeZone support) Rails returns nil, instead of YYYY-MM-DD 00:00:00

Here is confirmed output:

c = Clip.find(53385)

=> #<Clip id: 53385, title: “test 2”, description: “test2”, keywords: “test2”, publish_date: “2008-11-03 11:13:00”>

c.publish_date = “2008-11-03 19:00:00”

=> “2008-11-03 19:00:00”

c.save

=> true

c = Clip.find(53385)

=> #<Clip id: 53385, title: “test 2”, description: “test2”, keywords: “test2”, publish_date: nil>

c.publish_date

=> nil

Any reason for this behavior ?

Adam

Hello, There appears to be a strange bug in Rails 2.1.1 where if I set a datetime field to YYYY-MM-DD 00:00:00 (using TimeZone support) Rails returns nil, instead of YYYY-MM-DD 00:00:00

Here is confirmed output:

c = Clip.find(53385)

=> #<Clip id: 53385, title: "test 2", description: "test2", keywords: "test2", publish_date: "2008-11-03 11:13:00">

c.publish_date = "2008-11-03 19:00:00"

=> "2008-11-03 19:00:00"

c.save

=> true

c = Clip.find(53385)

=> #<Clip id: 53385, title: "test 2", description: "test2", keywords: "test2", publish_date: nil>

c.publish_date

=> nil

Your example isn't setting it to 00:00:00, but 19:00:00 ?

Also, what does the database say? I'd want to see it confirmed there as well. And lastly, are there any before/after filters on this model? Any triggers in the database that might affect it?

I used 19:00 b/c of Time zones (EST is GMT-5). I have a before_filter that sets the time zone to either the users time zone, or EST by default. Database is storing it as 00:00:00 b/c we store as UTC

before_filter: Time.zone = current_user.timezone ? current_user.timezone : $DEFAULT_TIME_ZONE where DEFAULT is EST

confirmed to be an issue with validates_date_time

http://www.semergence.com/2006/12/20/validates_date_time-not-ready-for-prime-time/

Whenever I need to store and manipulate a date independent of time, I prefer using the SQL Date type and corresponding ActiveSupport Date type. It's a lot cleaner for parsing and validating.