Rails: Сериализация объектов в базе данных? - PullRequest
32 голосов
/ 02 июня 2010

Я ищу некоторые общие рекомендации по сериализации объектов в базе данных.

  1. Что такое сериализованные объекты?
  2. Какие есть лучшие сценарии для сериализации объектов в БД?
  3. Какие атрибуты вы используете при создании столбца в БД, чтобы вы могли использовать сериализованный объект?
  4. Как сохранить сериализованный объект?
  5. А как получить доступ к сериализованному объекту и его атрибутам? (Используя хэши?)

Ответы [ 4 ]

53 голосов
/ 02 июня 2010

В компьютерных науках в контексте хранения и передачи данных сериализация - это процесс преобразования структуры данных или объекта в последовательность битов, чтобы они могли быть сохранены в файле, буфере памяти или переданы через ссылка на сетевое соединение, которая будет «воскрешена» позже в той же или другой компьютерной среде. (см. http://en.wikipedia.org/wiki/Serialization)

  1. Таким образом, сериализованные объекты (в контексте ActiveRecord) представляют собой текстовые / строковые представления объектов (закодированные с использованием YAML). После сериализации вы можете сохранить (почти) любой объект Ruby в одном поле базы данных.

  2. Вы можете использовать сериализацию, если у вас есть несколько сложных объектов, которые необходимо сохранить в базе данных, и вам не нужно извлекать записи на основе содержимого сериализованного атрибута. Я использовал их, например, для хранения настроек для пользователей веб-приложения: в основном это были хеши, которые я хотел сохранить в одном поле БД.

3. / 4. / 5. Используйте ActiveRecord :: Base.serialize , как предложил Марк-Андре Лафортун:

class User < ActiveRecord::Base
  serialize :preferences
end

u = User.new
u.preferences = {:show_tooltips => true, :use_extended_menu => false, ...}
u.save

# ...

u = User.find(23)
u.preferences # => {:show_tooltips => true, :use_extended_menu => false, ...}
8 голосов
/ 02 июня 2010

Действительно просто. Проверьте документ для ActiveRecord::Base.serialize.

2 голосов
/ 03 июня 2010

Посмотрите на MessagePack

0 голосов
/ 24 февраля 2014

Если вы используете Rails 4 с Postgresql, Rails 4 поддерживает поле hstore, которое может хранить хэши и разрешать запросы. http://blog.remarkablelabs.com/2012/12/a-love-affair-with-postgresql-rails-4-countdown-to-2013

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