2013-10-27 98 views
0

我正在使用Ruby on Rails 4,我想以正確的方式處理cookie中的數據。也就是說,當我存儲的cookie數據般(GMT-06:00) Central Time (US & Canada)處理與時區的cookie數據時遇到問題

cookies.permanent[:time_zone] = "(GMT-06:00) Central Time (US & Canada)" 

那麼它存儲%28GMT-06%3A00%29+Central+Time+%28US+%26+Canada%29 cookie的內容。

這樣,當我在我的代碼使用cookies[:time_zone]數據

Time.use_zone(cookies[:time_zone], &block) 

然後我得到ArgumentError Invalid Timezone: (GMT-06:00) Central Time (US & Canada)

我認爲問題是由於事實上cookies[:time_zone]數據是從「原樣」(%28GMT-06%3A00%29+Central+Time+%28US+%26+Canada%29)中讀取的,因此它在Time.use_zone中調用時會生成錯誤。

我該如何讀取/寫入cookie數據?


@馬特·約翰遜評論後更新

我 「hadcode」 是

time_zone = cookies[:time_zone] || Time.zone

,這樣我可以使用time_zone變量我的問題。然而,我注意到,Time.zone回報總是

(GMT-06:00) Central Time (US & Canada) 
# instead of "Central Time (US & Canada)" 

這是問題:在我的「硬編碼」的時候,Cookie是nil然後Time.zone應該返回正確的價值爲我的事,那就是Central Time (US & Canada)

所以我的問題變成:我應該如何處理這個問題,以便正確設置time_zone變量?

:本Time.zone documentation狀態,該方法

返回當前請求時區,如果這已設置 (經由::區=)。如果尚未爲當前請求設置Time.zone,則 將返回config.time_zone中指定的時區。

,在我application.rb文件我已經設置

`config.time_zone = 'Central Time (US & Canada)'` 
+0

你從哪裏開始閱讀該值? –

+0

我正在從默認的Ruby on Rails設置中讀取它。 – Backo

+0

這不能回答我的問題。請顯示您正在使用的代碼*以讀取時區設置字符串。 –

回答

1

Rails的時區列here。在這種情況下,你應該放棄你的字符串的第一部分,只是通過"Central Time (US & Canada)"

您可能還需要閱讀timezone tag wiki,其中有一段關於Rails時區的部分。

更新回答

根據您的更新,我可以看到你正在使用Time.zone。這不會返回一個字符串,但會返回一個TimeZone對象。所以你會得到包含GMT部分的TimeZone.to_s()的效果。

您應該改用Time.zone.name,它只返回時區的字符串標識符。

+0

我讀了「時區標記維基」,甚至是「Rails時區標識符」部分,特別針對Ruby on Rails ......所以,我應該如何在我的情況下讀取/寫入cookie數據? – Backo

+0

問題根本不在於cookie。這是您傳遞給'Time.use_zone'的字符串不是有效的時區標識符。這就是消息所說的「無效的時區」。 –

+0

什麼我必須存儲在餅乾而不是'(GMT-06:00)中央時間(美國和加拿大)'?我可以在哪裏檢索適當的數據來存儲? – Backo

相關問題