Есть ли способ пропустить сериализацию в Rails 3.1? - PullRequest
1 голос
/ 19 января 2012

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

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

class Tenant
  serialize :profile_template
end

Я, очевидно, могу получить доступ к полю следующим образом:

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

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

> t.read_attribute_before_type_cast(:profile_template)
 => nil

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

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

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

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

Для справки, я ожидал:

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

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

1 Ответ

3 голосов
/ 19 января 2012

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

read_attribute_before_type_cast(:foo) 

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

EDIT

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

bar = foo_before_type_cast

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...