Pablo Fernandez
Pablo Fernandez

Reputation: 287400

Is there a way to skip serialization in Rails 3.1?

In my Rails 3.1 application, I need to read the raw data of a field, without serialization, and then write it down without serialization. Is this possible? How?

By serialization I mean

class Tenant
  serialize :profile_template
end

I obviously can access the field like this:

> t.profile_template
 => [{:title=>"Page 1", ....}]

I then also tried with read_attribute_before_type_cast (as per lucapette's suggestion):

> t.read_attribute_before_type_cast(:profile_template)
 => nil

Using a string instead of a symbol had a different but disappointing result:

> t.read_attribute_before_type_cast("profile_template")
 => [{:title=>"Page 1", ...}]

and same with the attribute name:

> t.profile_template_before_type_cast
 => [{:title=>"Page 1", ...}]

Just for the record, what I was expecting is:

"---
- :title: Page 1
...."

In all samples, ... is the rest of a very long structure.

Upvotes: 1

Views: 1030

Answers (1)

lucapette
lucapette

Reputation: 20724

Yes there is a way. You have to use

read_attribute_before_type_cast(:foo) 

where :foo is the name of the field. The doc is not that good about that but I remember that there is a good explanation about it in The Rails 3 way.

EDIT

Although you're saying that this way isn't working for you I re-read the piece of information from the above-mentioned book. Well, there's another way of doing that. You can use

bar = foo_before_type_cast

where foo is the name of the field. It works like magic finders, pre-pending the name of the field to _before_type_cast . I can't try it right now but it really should work fine.

Upvotes: 4

Related Questions