Having problems with serialize :column_name

Hi guys

I have asked this questions on the Rails Forum as well, but haven’t
got any reply, so I will try here.

The thing is this:

I want to store “portlets” in a Portlet model in the db. I want to
store them togheter as they are the same kind of data in a way, but
there are different variateions of a portlet. They only have one db
column in common, the rest can vary a lot. So to do this I would like
to store the rest of the data in one single column.

What I have done to do this is the following:

  1. The model Portlet contains the columns id, name, portlettype_id &
    hash_value. The value in portlettype_id will decide what has to be
    stored in the hash_value column. Reading from the docs, I have also
    put “serialize :hash_value” in the class code.

  2. So in my new action in my PortletsController I just do @portlet =
    Portlet.new

  3. In my new.html.erb I have done the following (I’m leaving out some
    formatting specific html in this example):
    <% form_for @project do |f| %>
    <%= f.text_field :name %>
    <%= f.collection_select :portlettype_id, … %>
    <% fields_for "portlet[hash_value] do |hf| %>
    <%= hf.text_field :heading %>
    <%= hf.text_area :body %>
    <% end %>
    <% end %>

  4. Everything renders nice and I do get inputs with name
    portlet[hash_value][heading] etc.

  5. When I submit, the development log shows “hash_value” =>
    { “heading” => “text”} in the params hash, so it does seem to me that
    I do get the hash_value containing a hash itself.

  6. When I save, the name and portlettype_id fields get saved
    correctly, but in the hash_value column i get !
    map:HashWithIndifferentAccess

It seems to me that I must be doing something wrong, because when I
read about serialize in the api docs, it sounds like it would do
exactly what I’m after.

Any ideas? I would be glad to supply you with more info, as I badly
want to solve this problem.

Thanks
Kenny