associating to a hash?

I'm setting up my users' profiles as a set of key/value pairs...
where each key/value pair is a row in an associated table, like so:

   user_id
   profile_key
   value

  The profile_keys themselves are associations to a "profile_keys"
table (yea, way too organized, I know. :wink:

  For some syntax sugar, I've set up some methods on the "profile"
has_many association on the user:

    def [](k)
      return fetch(socialize(k))
    end
  
    def []=(k, v)
      kk = socialize k
      user = @owner
      if entry = fetch_object(kk)
        entry.value = v
      else
        entry = UserProfile.new(
          :profile_key => kk, :value => v, :user => user
        )
      end
      entry.save
      return entry
    end
  
    def socialize(key)
      if key.class == Fixnum
        key = UserProfileKey.find key
      elsif key.class == String or key.class == Symbol
        key = UserProfileKey.find_by_name key.to_s
      end
      return key
    end
  
    def fetch_object(profile_key)
      result = self.collect { |x| x if x.profile_key == profile_key }
      result.compact!
      if v = result.first
        return v
      else
        return nil
      end
    end
    
    def fetch(profile_key)
      if v = fetch_object(profile_key)
        return v.value
      else
        return nil
      end
    end

  Before I go too much further down this path... I'm *sure* somebody
else out there has set up an associated key/value pair table... is there
some published prior art on this? A plugin perhaps? (If not, the end result
is probably going to be me writing one... :wink:

  Thanks,
    Tyler