Как мне сохранить массив в базе данных в Ruby on Rails? - PullRequest
5 голосов
/ 25 января 2012

Я пытаюсь сохранить массив массивов в моей базе данных SQLite в Rails.

Прямо сейчас у меня есть объект, который может содержать такой массив, и экземпляры, похоже, сохраняются без проблем. Тем не менее, он явно не сохраняется в базе данных - когда я вызываю функции на My_Object.array в представлениях, отличных от того, на котором создается массив, он получается нулевым и не работает.

Например:

class My_Object < ActiveRecord::Base
  attr_accessor :array
end

Когда я вызываю My_Object.new(:array => [ [1, 2, 3], [4, 5, 6] ]), кажется, что все работает правильно, но я не могу получить доступ к свойству :array где-либо еще, просто получается ноль.

Есть идеи?

1 Ответ

12 голосов
/ 25 января 2012

Сначала создайте текстовый столбец с именем array в вашей таблице.Затем используйте serialize:

class My_Object < ActiveRecord::Base
  serialize :array
end

. Он автоматически сериализует ваш массив с использованием YAML и автоматически распаковывает его, когда вы извлекаете его из базы данных.

Youследует пересмотреть ваш дизайн, хотя.Вы вообще не сможете ничего делать с сериализованными данными в базе данных, и, в частности, вы не сможете использовать их в запросах.YAML будет просто непрозрачным BLOB-объектом, который входит в базу данных и возвращается, база данных больше ничего не сможет с ним сделать.Если вы уверены, что базе данных никогда не нужно будет заглядывать внутрь array, тогда используйте serialize, в противном случае вы захотите настроить дополнительные таблицы для хранения данных массива.

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