Hashed Attributes
Requires a column to be used for a serialized hash
# db/migrations/****_create_people.rb
t.text :preferences
In the model you declare the column name and a list of attributes the hash will store
# app/models/person.rb
class Person < ActiveRecord::Base
hashed_attributes :preferences, :theme, :plan, :favorite_color
end
Initialization
Initializes preferences as a hash
Person.new
{
:id => nil,
:name => nil,
:preferences => {},
:emails => nil,
:created_at => nil,
:updated_at => nil
}
Usage
Hash keys are made available as getter/setter methods on the model
person = Person.new(:theme=>"molokai", :plan => "pro", :favorite_color=>"orange")
{
:id => nil,
:name => nil,
:preferences => {
:favorite_color => "orange",
:theme => "molokai",
:plan => "pro"
},
:emails => nil,
:created_at => nil,
:updated_at => nil
}
Methods can be used normally and are stored in the preferences hash
person.theme = 'the blue theme'
person.plan = 'pro account'
person.favorite_color = 'black'
person.theme
# => 'the blue theme'