设置哈希键的值以返回函数的值,rails 3& mongomapper

时间:2012-05-11 20:35:10

标签: ruby-on-rails ruby ruby-on-rails-3 mongomapper

有人可以解释这里发生了什么吗?这是一个非常简单的例子,试图在我的rails 3.0.11,mongomapper 0.9.0 app中设置一个哈希键。

class Foo
  key :a, Hash
  key :b, Hash
end

> foo = Foo.new( :a=>{:timezone=>"Adelaide"}, :b=>{:timezone=>"Azores"} )
> foo.a[:time] = Time.use_zone(foo.a[:timezone]){Time.zone.now}
  => Fri, 11 May 2012 20:20:36 AZOST +00:00 
> foo.a[:time]
  => nil 

当使用来自相同哈希的时区时,它实际上没有将哈希键设置为返回值。但是:

> foo.a[:time] = Time.use_zone(foo.b[:timezone]){Time.zone.now}
 => Sat, 12 May 2012 05:51:07 CST +09:30 
> foo.a[:time]
 => Sat, 12 May 2012 05:51:07 CST +09:30 

使用b哈希时区并存储该值。什么?我可以将use_zone块的返回值存储在本地变量中,然后设置哈希键,或者为Timezone等使用静态字符串,但是当块使用哈希本身的时区值时,我无法设置密钥?

1 个答案:

答案 0 :(得分:1)

请改为尝试:

foo = Foo.new( :a=>{:timezone=>"Adelaide"}, :b=>{:timezone=>"Azores"} )
Time.use_zone(foo.a[:timezone]){
  foo.a[:time] = Time.zone.now
}