I have a rails class that serializes one attribute.

    class Statistic < ActiveRecord::Base
      serialize :userlist
    end

When a statistic object is loaded and it's userlist changed from a
String to an Array userlist always gets serialized back into a String.
Objects that are properly deserialized into Arrays stay that way. The
framework seems to remember and deserialize :userlist into a String
even if it went in as an Array.

  >> s = Statistic.find 238
  => #<Statistic id: 238, userlist: "--- \n- 2222437\n- \"99779\"\n-
\"120429\"\n- \"210503\"\n- 32...">
  # Note here: :userlist is an Array in YAML. Why doesn't it get
correctly deserialized?

  >> s.userlist.class
  => String
  >> s.userlist = s.userlist.split(/\s+/)

  >> s.userlist.class
  => Array

  >> s.save
  => true

  >> s.reload
  => #<Statistic id: 238,userlist: "--- \n- 2222437\n- \"99779\"\n-
\"120429\"\n- \"210503\"\n- 32...">

  >> s.userlist.class
  => String

The goal of this exercise is to convert all String userlists to Array.
If I change the class (serialize :userlist, Array) before converting I
get TypeMismatch exceptions.

    ActiveRecord::SerializationTypeMismatch: userlist was supposed to
be a Array, but was a String

Is there a way to force AR to interpret userlist as an Array?

% rails --version
Rails 2.3.4

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to