Могу ли я сохранить как свойство модели как хеш? - PullRequest
2 голосов
/ 06 марта 2011

Я хочу сделать следующее.

Я хочу, чтобы в моей модели был столбец, в котором хранятся хэши, т. Е. Пары имя / значение. Когда я загружаю запись в свою модель, я не хочу, чтобы она анализировала десерализуемое значение из базы данных, ЕСЛИ Я не получаю к нему доступ, т.е. ленивая инициализация.

Это ч / б, только несколько процентов моих строк в БД будут иметь значения для хэша, и к ним будет редко обращаться.

Возможно ли это?

пример использования:

user.properties["age"] = 12

user.properties["height"] = xxx

user.save

Я не уверен, как это будет сохранено в БД, может быть, в формате JSON?

Ответы [ 4 ]

5 голосов
/ 06 марта 2011

Да, вы можете сериализовать данные.

Выдержка из http://api.rubyonrails.org/classes/ActiveRecord/Base.html:

class User < ActiveRecord::Base
  serialize :preferences
end

user = User.create(:preferences => { "background" => "black", "display" => large })
User.find(user.id).preferences # => { "background" => "black", "display" => large }
1 голос
/ 06 марта 2011

ActiveRecord :: Base # serialize Делает именно это.

class User < ActiveRecord::Base
  serialize :preferences, Hash
end

user = User.create(:preferences => { "background" => "black", "display" => large })
User.find(user.id).preferences # => { "background" => "black", "display" => large }
User.find(user.id).preferences[:background] # => "black"
0 голосов
/ 14 апреля 2012

Стоит добавить, что для правильной сериализации столбец preferences должен иметь тип Text, см. Использование сериализации Rails для сохранения хэша в базе данных

0 голосов
/ 07 марта 2011

Вы можете использовать строку в качестве типа данных и сохранить ее в виде хэша в формате yamlВам нужно загрузить эту строку yaml, но ИМХО дает вам больше переносимости.

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