2012-05-11 23 views
1

有人可以解釋這裏發生了什麼嗎?這是一個很簡單的例子,它試圖在我的rails 3.0.11,mongomapper 0.9.0應用程序中設置一個哈希鍵。將哈希鍵的值設置爲函數的返回值,rails 3&mongomapper

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塊的返回值存儲在局部變量中,然後設置哈希鍵,或者爲時區等使用靜態字符串,但是當塊使用哈希本身的時區值時,我無法設置鍵值?

回答

1

試試這個:

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

哼。在Time.use_zone塊中設置密鑰確實有效。你能解釋一下這個區別嗎?爲什麼這項任務在一種情況下工作,而不是另一種? – Bee