Сериализация Ruby on Rails Scaffold - PullRequest
0 голосов
/ 10 марта 2011

Я просматривал код Rails и заметил, что один из классов в моделях содержал следующую строку: serialize: some_property.Я хотел создать новый класс, который будет содержать сериализованное свойство, но я не знаю, как это сделать точно.Какой тип я должен объявить для сериализованного свойства, т. Е. Скрипт ruby ​​/ generate scaffoldСпасибо за любую помощь!

1 Ответ

4 голосов
/ 10 марта 2011

Метод класса serialize в модели, которая наследуется от ActiveRecord::Base, возьмет этот столбец / атрибут и при сохранении превратит его в YAML, а при загрузке сделает наоборот. Отлично подходит для хранения базового массива или хеш-объекта в вашей модели.

Для Rails требуется только использование столбца типа text в базе данных / миграции для сериализованного поля. Поэтому при миграции просто убедитесь, что у вас есть следующее для сериализованного поля (в данном случае settings):

create_table :accounts do |t|
  t.text :settings
end

Тогда в вашей модели это будет так же просто, как добавить вызов к serialize:

class Account < ActiveRecord::Base
  serialize :settings
end

Затем при вызове Account.new(:settings => { :big_head_mode => true, :awesome => true }).save Rails автоматически сериализует хеш settings в YAML и сохраняет его в вашей базе данных.

И для ясности, леса не имеют никакого отношения к этому вопросу. После создания каркаса вам все равно нужно добавить вызов к serialize в вашей модели.

...