2011-06-26 84 views
2

通常情況下,我有:如何檢查哈希cookie值是否設置?

cookies[:location] = { :value => { :city => 'foo', :country => 'bar' } } 

然而,有時:country沒有設置。當我這樣做:

cookies[:location][:country].present? 

,以檢查是否已被國家設定,它會返回一個錯誤:

[:country] is not a symbol 

我將如何檢查是否一個國家在cookie[:location]設置,如果我不能做到這一點這辦法?

回答

3

cookies哈希嵌套不同於你的期待::value嵌套下:location:city:country:value下嵌套。下面是一些irb輸出,讓你開始:

[~]$ irb 
>> cookies={} 
=> {} 
>> cookies[:location] = { :value => { :city => 'foo', :country => 'bar' } } 
=> {:value=>{:city=>"foo", :country=>"bar"}} 
>> cookies[:location][:value][:country] 
=> "bar" 
>> cookies.to_s 
=> "{:location=>{:value=>{:city=>\"foo\", :country=>\"bar\"}}}" 

如果你巢像下面的哈希值,你會得到你預期的行爲:

>> cookies[:location] = { :city => 'foo', :country => 'bar' } 
=> {:city=>"foo", :country=>"bar"} 
>> cookies[:location][:country] 
=> "bar" 
+1

是的,但我認爲Rails會某種汽車的系列化與餅乾。在Rails 3(3.1 RC4)中,你不能這樣做:'cookies [:location] = {:city =>'foo',:country =>'bar'}'並且期望做'cookies [:location] [:城市]'。你會得到一個錯誤:「當你沒有想到它時,你有一個零對象!在控制檯(irb)中,您的示例有效。但不能與Rails(試一試!)。除非我在某處做錯了某些事情 –

+0

我決定以非散列形式存儲cookie值。感謝您的洞察力。 –

+0

抱歉不能早日回覆您。我確實看了一下Rails的cookies,我看你在說什麼。儘管沒有答案/解釋。祝你的項目好運。 – dwhalen