serialize(attr_name, class_name = Object)public
If you have an attribute that needs to be saved to the database as an object, and retrieved as the same object, then specify the name of that attribute using this method and it will be handled automatically. The serialization is done through YAML. If class_name is specified, the serialized object must be of that class on retrieval or SerializationTypeMismatch will be raised.
- attr_name - The field name that should be serialized.
- class_name - Optional, class name that the object type should be equal to.
# Serialize a preferences attribute class User serialize :preferences end
# File activerecord/lib/active_record/base.rb, line 964 def serialize(attr_name, class_name = Object) serialized_attributes[attr_name.to_s] = class_name end
Or, perhaps clearer would be:
That may seem obvious, but it is common to be in the habit of passing things as a key/value pair.
A serialized attribute will always be updated during save, even if it was not changed. (A rails 3 commit explains why: http://github.com/rails/rails/issues/8328#issuecomment-10756812)
Guard save calls with a changed? check to prevent issues.
class Product < ActiveRecord::Base serialize :product_data end