This project is archived and is in readonly mode.
OrderedHash serialization does not work when storing arrays
Reported by Philippe Creux | March 29th, 2011 @ 11:21 PM
I'm storing an OrderedHash containing A/R validation errors in a serialized column. When I retreive it from the database the array of errors become a string containing the last item of the array.
Model:
class InvalidRecord < ActiveRecord::Base
belongs_to :record, :polymorphic => true
serialize :validation_errors
end
Schema:
create_table "invalid_records", :force => true do |t|
t.integer "record_id", :null => false
t.string "record_type", :null => false
t.text "validation_errors"
t.datetime "created_at"
t.datetime "updated_at"
end
The following code...
r = InvalidRecord.new(:record => invalid_user, :validation_errors => invalid_user.errors)
p r
r.save!
r.reload
p r
outputs:
# new record: (errors on username is an array containing 2 items)
#<InvalidRecord id: nil, record_id: 1, record_type: "User",
validation_errors: #<OrderedHash {:username=>["can't be blank", "is too short (minimum is 3 characters)"]}>,
created_at: nil, updated_at: nil>
# saved record: (errors on username is now a string)
#<InvalidRecord id: 2, record_id: 1, record_type: "User",
validation_errors: #<OrderedHash {:username=>"is too short (minimum is 3 characters)"}>,
created_at: "2011-03-29 22:08:24", updated_at: "2011-03-29 22:08:26">
I'm using ree-1.8.7-2010.02 [ x86_64 ]
with
sqlite3
.
Here is the YAML stored in the db:
--- !omap
- :username: can't be blank
- :username: is too short (minimum is 3 characters)
No comments found
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »
<h2 style="font-size: 14px">Tickets have moved to Github</h2>
The new ticket tracker is available at <a href="https://github.com/rails/rails/issues">https://github.com/rails/rails/issues</a>