你如何清除轨道上的会话红宝石的单个条目?
-
22-08-2019 - |
题
在做session[:foo] = nil
当Ruby on Rails的离开在会话对象命名:foo
的条目。你怎么能摆脱从会话对象单次入境的?
解决方案
其实,有一种方式来获得删除该会话的值。就像RichH说,会话变量是CGI :: Session实例。当输入类似session[:foo]
它实际上是在寻找那象征了在会话对象@data
实例变量。数据变量是散列。
修改强>有一个在CGI :: Session类数据实例变量。如果你去文档和看为[]=
方法的源代码你会看到,有一个@data
构件。
所以删除session[:foo]
所有你需要做的就是访问从会话中@data
变量
session.data[:foo]
现在将其删除:
session.data.delete :foo
一旦你做到这一点,应该有你的会话变量不富。
其他提示
它看起来像在最简单的版本的作品。所有商店(饼干,文件,ActiveRecord的,...)使用AbstractStore::SessionHash
作为包含该数据,则不同的商店提供仅加载和保存AbstractStore::SessionHash
实例的装置的对象。
AbstractStore::SessionHash
从Hash
继承,所以这推迟到Hash#delete
方法:
session.delete(:key_to_delete)
由于Session是一个Ruby CGI ::会话一>而不是一个哈希,要求删除将真正删除会话。删除不带任何参数 - 这是我的你得到了“错误的参数数目(1或0)”消息,当您尝试hyuan暗示什么
在普遍接受的方法来清除会话表项是与会话[:FOO] =零你建议。这是很不理想,但是之类的语句会话[:富] .nil?预期行为。
我真的希望它的表现像一个正常的哈希......但事实并非如此。
不隶属于 StackOverflow