If the database table backing your model class contains defaults that are meant to be evaluated at insert time (e.g., the now() function in Postgres for a created_at column), they will not work as expected.
attributes_from_column_definitions, invoked by ActiveRecord::Base.initialize, sets columns to column.default, which must be evaluated when it is initially set, rather than each time it is called.
The following illustrates: notice that the default time, which is defined in the schema as 'now()' is always the same:
>> UserResponse.columns.find{|foo| foo.name == 'created_at'}
=> #<ActiveRecord::ConnectionAdapters::Column:0x249b4ec @primary=false, @default=Tue Jun 20 10:35:17 EDT 2006, @type=:datetime, @number=false, @limit=nil, @text=false, @name="created_at", @null=false>
>> UserResponse.columns.find{|foo| foo.name == 'created_at'}
=> #<ActiveRecord::ConnectionAdapters::Column:0x249b4ec @primary=false, @default=Tue Jun 20 10:35:17 EDT 2006, @type=:datetime, @number=false, @limit=nil, @text=false, @name="created_at", @null=false>
>> UserResponse.columns.find{|foo| foo.name == 'created_at'}
=> #<ActiveRecord::ConnectionAdapters::Column:0x249b4ec @primary=false, @default=Tue Jun 20 10:35:17 EDT 2006, @type=:datetime, @number=false, @limit=nil, @text=false, @name="created_at", @null=false>
The way to get around this particular problem is to not have defaults for the created_at column, since ActiveRecord will actually do the right thing if no default is provided. However, for other columns this can be a big problem if the default is actually intended to come from a stored procedure.