This post will guide you how to do Serialization for your attributes in Rails.
Serialize means you want to save arbitrary Ruby data structure into the database.
Let consider we have a User model in which we want to store preferences for user in a Ruby data structure format. Previously it was only YAML.
class User < ActiveRecord::Base
serialize :preferences
end
user = User.find 1
user.preferences = {:foo => 'bar'}
user.save
So now we can pass a second parameter to serialize method to use that serialization method.
class User < ActiveRecord::Base
serialize :preferences, SomeCoolEncoder.new
end
You need to implement this encoder! It can be a JSON, XML, Base64. Or what every encoding technique you like to use.
A sample encoder look like this.
class Base64Encoder
def load(value)
return unless value
value.unpack('m').last
end
def dump(text)
[text].pack('m')
end
end
This new encoder must have these methods in it!
So now you attribute is serialized and you can store data in it in your given format.
Ok so now we talk about ActiveModel::Serialization
ActiveModel::Serialization will give you serialized attribute for your classes.
A very simple example to use ActiveModel::Serialization
class Post
include ActiveModel::Serialization
attr_accessor :title
def attributes
{'title' => title}
end
end
# So you can use like
post = Post.new
post.serializable_hash # => {"title"=>nil}
post.name = "Rails is Cool!!"
post.serializable_hash # => {"name"=>"Rails is Cool!!"}
Can use two inbuilt Serialization techniques
include ActiveModel::Serializers::JSON
include ActiveModel::Serializers::Xml
This is a very short intro for Serialization. Hope i will write more in detail soon!!
I got this from
@tenderlove talk in
RailsConf2011