I don’t understand the following example from the ActiveRecord::Base
section in http://api.rubyonrails.org/ :
class User < ActiveRecord::Base
serialize :preferences, Hash
user = User.create(preferences: %w( one two three ))
User.find(user.id).preferences # raises SerializationTypeMismatch
What was the design choice, that I get the exception in the last line?
I could understand, if there is an exception in User.create, because
:preferences is supposed to be a Hash (if I understood correctly the
‘serialize’ function), and instead an Array is passed. But the
documentation clearly says that the exception happens at retrieval:
You can also specify a class option as the second parameter that’ll
raise an exception if a serialized object is retrieved as a descendant
of a class not in the hierarchy.
Is there a deeper reason, why this error is caught at retrieval, and not
already at the time of storing the value?