2013-11-18 2 views

ответ

12

Я woud посмотреть в сериализации хэша для его хранения. Затем десериализуйте его, чтобы извлечь его.

Когда вы сериализуете хэш, результатом будет закодированная строка. Эта строка может быть расшифрована, чтобы вернуть исходный объект.

Для этого вы можете использовать YAML или JSON. Оба они хорошо поддерживаются в Ruby.


YAML Пример

require "yaml" 

cookies[:test] = YAML::dump {a: 1, b: "2", hello: "world"} 
# => "---\n:a: 1\n:b: '2'\n:hello: world\n" 

YAML::load cookies[:test] 
# => {a: 1, b: 2, c: "world"} 

JSON Пример

require "json" 

cookies[:test] = JSON.generate {a: 1, b: "2", hello: "world"} 
# => '{"a":1,"b":"2","hello":"world"}' 

JSON.parse cookies[:test] 
# => {"a"=>1, "b"=>"2", "hello"=>"world"} 

Примечание: при использовании JSON.parse, результирующий объект будет иметь строка на основе ключей

+0

Я попробую этот путь и посмотрю, работает ли он на меня, большое спасибо –

+0

работал отлично! Спасибо и поздравляем –

+0

Это не работает для меня вообще :(Я получаю жалобы на символ «:» («синтаксическая ошибка, неожиданная»: «, ожидающая») ». Любые идеи, почему? Я пробовал оба ваши предложения YAML и JSON, но оба жалуются на ту же проблему. – justinraczak

1

Существует несколько способов, которыми это возможно (т. сохранение строки и eval с использованием этого значения, SCARY!). Это простой способ.

cookies[:test_top] = 5 
cookies[:test_middle] = 3 
cookies[:test_bottom] = 1 

Вы также можете преобразовать в JSON, а затем проанализировать его при загрузке файла cookie.

Новые версии Rails включают автоматическую сериализацию с использованием объекта сеанса.

2

С Rails 4.1 мне пришлось использовать круглые скобки, подобные этому. Без этого он допустил ошибку.

cookies[:test] = JSON.generate({a: 1, b: "2", hello: "world"}) 
+0

Я не думаю, что вам нужны фигурные скобки. – justingordon

Смежные вопросы