我正在研究ruby rails项目。我正在使用Rails 2.3.4和ruby 1.8.7。我有一个名为User的模型。
我在初始化程序中有以下代码
$h = {User => 'I am user' }
在控制器中我有以下代码
$h[User]
第一次当我做[用户]时,我得到了正确的结果。但是,如果我刷新页面,那么我得到零值。
我认为这就是正在发生的事情。
第一次加载User类时,我得到了正确的值。但是,当我刷新页面时,此时间控制器返回$ h [User]的nil值。
因为rails在刷新页面时会卸载所有常量,所以似乎加载了一个新的User类。此User类与初始化程序中用作键的User不同。
我知道使用User类是一种不好的做法。我的问题是,有人可以在用户类作为密钥时向我解释,然后在内部如何ruby存储密钥。 ruby是否使用User的object_id作为密钥?我
答案 0 :(得分:4)
Hash
在用作键的任何对象上调用hash
方法。是的,关于你的代码无法正常工作的理论是正确的。
在Rails控制台中试试这个:
User.hash # => 215678765 (or whatever)
reload!
User.hash # => 215876673
重新加载类会更改hash
方法返回的值,这意味着它在Hash
中使用时不再是相同的键。
每次使用:user
或其他会解析为同一密钥的内容。
答案 1 :(得分:0)
在用作哈希中的键的每个对象上使用hash方法。