2012-01-19 9 views
0

В моем приложении Rails 3.1 мне нужно прочитать необработанные данные поля без сериализации, а затем записать его без сериализации. Это возможно? Как?Есть ли способ пропустить сериализацию в Rails 3.1?

По сериализации Я имею в виду

class Tenant 
    serialize :profile_template 
end 

я, очевидно, может получить доступ к области, как это:

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

Затем я также попытался с read_attribute_before_type_cast (по предложению lucapette в):

> t.read_attribute_before_type_cast(:profile_template) 
=> nil 

Использование строки вместо символа имело другое, но неутешительное resu л:

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

и то же самое с именем атрибута:

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

Просто для записи, что я ожидал, что это:

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

Во всех образцах, ... является остаток очень длинной структуры.

ответ

1

Да, есть способ. Вы должны использовать

read_attribute_before_type_cast(:foo) 

где: foo - название поля. doc не так уж хорош в этом, но я помню, что в The Rails 3 есть хорошее объяснение.

EDIT

Хотя вы говорите, что этот способ не работает для вас, я перечитал часть информации из вышеупомянутой книги. Ну, есть еще один способ сделать это. Вы можете использовать

bar = foo_before_type_cast 

где foo - это название поля. Он работает как волшебные искатели, предварительно ожидая названия поля до _before_type_cast. Я не могу попробовать это сейчас, но это действительно должно работать нормально.

+0

Я пробовал это, но он возвращает нуль для меня. Я исправлю вопрос. – Pablo

+0

Я обновил ответ. К сожалению, я не могу сейчас попробовать, я смогу сделать тест сегодня вечером, если это поможет. – lucapette

+0

Я только что попробовал ... это дает де-сериализованную версию вместо строки. Я соответствующим образом обновлю ответ. Спасибо, что посмотрели на это :) – Pablo

Смежные вопросы