My Profile Photo

rubycoloredglasses


I'm Jason, a web applications developer in the San Francisco Bay area.


Using Serialize Option with ActiveRecord Objects

Documentation seems to be more available on how to build forms with check boxes or a multiple select field for ActiveRecord objects that have a has_many or has_many_and_belongs_to association with other ActiveRecord objects. This article shows you how provide a multiple select form based on a custom defined array, with the selected options stored in a single attribute of your ActiveRecord object.

Lets say you are working on a form for a blog post that needs a multi-select field of statically defined adjectives, with the one or many adjectives saved to one field for the post.

def self.adjectives
  [
    'awesome',
    'phenomenal',
    'terrific',
    'fantastic',
    'amazing',
    'outstanding',
    'stupendous',
    'great',
    'incredible',
    'magnificent',
    'impressive',
    'excellent',
    'sensational',
    'fantasmagoric',
    'legendary',
    'marvelous'
  ]
end

Next, inside of your model, insert a line indicating the name of the string or text field you’re going to use to store the serialized values from the form.

class Post < ActiveRecord::Base
  serialize :positive_adjectives, Array
end

In the view file for your form, insert the following tag to create a select tag which loads all the options with the previously selected ones saved to the post field in a single field, serialized in YAML format.

<%= select_tag 'post[positive_adjectives]', options_for_select(Post.adjectives, @post.positive_adjectives), { :multiple => true, :size => 10 } %>

It appears that there are methods, possibly native ones for Rails 3.2.2 soon, for storing your objects in the database in JSON format instead of YAML.