Serialized attribute saved as HashWithIndifferentAccess in database

My Booking model has: serialize :custom_data, Hash

From the console it works as expected saving values to the custom_data
attribute.

But when having a form with parameters like
this: booking[custom_data][hello] and creating a new object in the
controller like this: Booking.new( params[:booking] ), values are saved
in
the database with added metadata like this: —
!ruby/hash:ActiveSupport::HashWithIndifferentAccess

How can get rid of the HashWithIndifferentAccess-metadata when saving
from
a form?

Hi,

You can check condition like this

if params[:booking].kind_of? HashWithIndifferentAccess
// logic here
end

On Fri, Jun 1, 2012 at 6:26 PM, Espen A. [email protected]
wrote:

[email protected]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.


Thanks & Regards,
MuraliDharaRao.T
+91-9642234646

I fixed it by converting it to a hash:
@booking.custom_data = params[:booking][:custom_data].to_hash if
params[:booking][:custom_data]

I do think that Rails should handle this automatically though. There is
no
way to see this error by just using rails. You have to look at the
actual
data stored in the database to see that it stores more than just the
actual
data. I would suspect there are more people saving serialised attributes
from a form and will have this issue without realising it.

On Friday, 1 June 2012 09:15:18 UTC-4, Espen A. wrote:

I don’t follow that logic at all. If you’re interacting with a
serialized
column by any other means than loading it from the DB as a Ruby object,
you
are DOING IT WRONG. If you really, really want to interact with hashes
in
the DB, check out things like Postgres’s Hstore:

http://www.postgresql.org/docs/9.0/static/hstore.html

–Matt J.