На самом деле project = redis.hget('active_projects', task[:project])
возвращает строку, а не хэш рубина.Вот почему это не получается.
Я играю с https://github.com/nateware/redis-objects, чтобы посмотреть, смогу ли я сделать то, что хочу.
Кроме того, вместо выполнения:
Redis.new.hset('active_projects', active_project[:id], active_project)
Вы можете сделать:
Redis.new.hset('active_projects', active_project[:id], Marshal.dump(active_project))
И это просто работает, благодаря маршалированию хеша.
Тем не менее, я не считаю это хорошим решением.Я не люблю использовать Marshaling, так как отладку очень сложно смотреть на базу данных.
Также я только что получил:
incompatible marshal file format (can't be read)
format version 4.8 required; 123.58 given
Итак, давайте откроем другой подход ...
edit:
Теперь я играю сJSON.dump и JSON.parse.Они кажутся лучшим подходом.
Редактировать:
В итоге я инкапсулировал этот хэш в реальный объект.Итак, у меня есть класс Project и класс Task.В каждом из них я определяю методы to_json
и self.json_create(o)
, чтобы их можно было преобразовывать в JSON и обратно.
Он работает довольно хорошо.