Сделайте свою последнюю строку такой:
hash['map']['consistencyGroup'].setdefault(consistencyGroupId, []).append(volumeName)
setdefault
либо возвращает значение ключа, если он присутствует, либо, если его нет, устанавливает его на предоставленное значение по умолчанию ([]
в этом случае), а затем возвращает это.
На самом деле существует способ добраться, удаляют значение из сессии. Как RichH сказал, что переменной сеанса является CGI:: экземпляр Сессии. Когда вводят что-то как session[:foo]
это на самом деле ищет тот символ в a @data
переменная экземпляра в объекте сессии. Та переменная данных является хешем.
Править: В CGI существует переменная экземпляра данных:: класс Сессии. Если Вы переходите к документам и смотрите на исходный код для []=
метод Вы будете видеть, что существует a @data
участник.
Таким образом удалить session[:foo]
все, что необходимо сделать, является доступом это @data
переменная из сессии
session.data[:foo]
Теперь удалить его:
session.data.delete :foo
После того как Вы делаете это в Вашей переменной сеанса больше не должно быть нечто.
Поскольку Сессией является CGI Ruby:: Сессия и не Хеш, вызов удаляет, на самом деле удалит сессию. Удалите не берет параметров - это - мой, Вы получаете "неправильное количество аргументов (1 или 0)" сообщение, когда Вы пробуете то, что предлагает hyuan.
Общепринятый способ очистить запись сессии с сессией [: нечто] = ноль, как Вы предполагаете. Это далеко от идеала, но операторов как сессия [: нечто] .nil? будет вести себя как ожидалось.
Мне действительно жаль, что это не вело себя как нормальный Хеш..., но это не делает.