1

誰かがここで何が起こっているのか説明できますか? これは、レール 3.0.11、mongomapper 0.9.0 アプリでハッシュ キーを設定しようとする奇妙さの非常に単純化された例です。

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 ブロックの戻り値をローカル変数に格納してから、ハッシュ キーを設定するか、タイムゾーンなどに静的文字列を使用できますが、ブロックがハッシュ自体のタイムゾーン値を使用する場合、キーを設定できませんか?

4

1 に答える 1

1

代わりにこれを試してください:

foo = Foo.new( :a=>{:timezone=>"Adelaide"}, :b=>{:timezone=>"Azores"} )
Time.use_zone(foo.a[:timezone]){
  foo.a[:time] = Time.zone.now
}
于 2012-05-12T17:43:18.373 に答える