Как Вы очищаете однократный въезд от рубина на сессии направляющих?

Сделайте свою последнюю строку такой:

hash['map']['consistencyGroup'].setdefault(consistencyGroupId, []).append(volumeName)

setdefault либо возвращает значение ключа, если он присутствует, либо, если его нет, устанавливает его на предоставленное значение по умолчанию ([] в этом случае), а затем возвращает это.

28
задан aarona 23 May 2014 в 21:07
поделиться

2 ответа

На самом деле существует способ добраться, удаляют значение из сессии. Как RichH сказал, что переменной сеанса является CGI:: экземпляр Сессии. Когда вводят что-то как session[:foo] это на самом деле ищет тот символ в a @data переменная экземпляра в объекте сессии. Та переменная данных является хешем.

Править: В CGI существует переменная экземпляра данных:: класс Сессии. Если Вы переходите к документам и смотрите на исходный код для []= метод Вы будете видеть, что существует a @data участник.

Таким образом удалить session[:foo] все, что необходимо сделать, является доступом это @data переменная из сессии

   session.data[:foo]

Теперь удалить его:

   session.data.delete :foo

После того как Вы делаете это в Вашей переменной сеанса больше не должно быть нечто.

9
ответ дан vrish88 28 November 2019 в 02:25
поделиться

Поскольку Сессией является CGI Ruby:: Сессия и не Хеш, вызов удаляет, на самом деле удалит сессию. Удалите не берет параметров - это - мой, Вы получаете "неправильное количество аргументов (1 или 0)" сообщение, когда Вы пробуете то, что предлагает hyuan.

Общепринятый способ очистить запись сессии с сессией [: нечто] = ноль, как Вы предполагаете. Это далеко от идеала, но операторов как сессия [: нечто] .nil? будет вести себя как ожидалось.

Мне действительно жаль, что это не вело себя как нормальный Хеш..., но это не делает.

2
ответ дан RichH 28 November 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: