2012-09-17 14 views
0

我對Rails比較陌生,我正在構建一個處理天氣數據的應用程序。我的主要用途將在美國境內,因此向用戶展示的內容大概是華氏溫度。我使用的數據饋送是攝氏溫度。在哪裏從華氏轉換爲攝氏在Rails應用程序?

我會解決這個問題的正常方法是在模型中有一個celsius列,然後自定義的fahrenheit模型方法將從F轉換爲C.但是,由於各種設計決策,我沒有特定的字段對於溫度。

我看到一些替代品;(TL博士,我跟蹤了很多不同的環境條件而不僅僅是天氣,所以我有一個通用的value列和type列。):

  1. 商店˚F內部。只有在使用天氣數據Feed時才轉換爲C.假設我從來沒有一個擁有合理測量系統的地區的用戶。
  2. 在內部存儲C。在視圖中轉換爲F(如果用戶的偏好是看F)。這是非常棘手的,因爲就我所知,轉換value的公式需要在Rails視圖和JS中實現。
  3. 在內部存儲C。根據上下文轉換爲F,即當創建一個記錄,其中type是溫度並且用戶具有華氏溫度偏好時,運行執行轉換的before_save回調。我不知道該怎麼做讀...

什麼是正確的方式來構造這?謝謝!

回答

0

我沉思了@Annitak給出的一般性迴應,想出了我需要做的事情。我有一個temperature類型。所以我只保留這種類型,讓它成爲攝氏溫度。然後我添加一個新的類型temperature_fahrenheit。然後我有一個:before_save在我的模型中進行F到C轉換的回調。這樣我就可以將內部數據始終保留爲攝氏溫度,但仍然可以很容易地以華氏溫度提交表格。

現在看起來很明顯,但它逃脫了一段時間。

+0

雖然這是公認的答案,但我強烈建議不要這樣做。這有重複數據和應用程序和數據庫不必要的複雜性。接受的答案應該是將其描述爲演示問題的答案,即使用JavaScript或至少一個PORO ViewModel/Presenter類來處理它。 – Todd

6

商店一個內部形式,它應該是國際標準化的Celcius規模。

其他任何事情都是演示問題。

+0

我處於與體重相同的狀況。我有兩個重量表示指標,KG和Pound。我使用KG作爲內部表示,並根據需要轉換爲英鎊。 –

1

我會說它存儲在數據庫中的一個演示文稿(C或F),並在JS中將其轉換爲客戶端。這也使編碼功能變得微不足道,因此用戶可以決定他/她自己在C和F之間翻轉而不需要往返服務器。

1

這裏是我做過什麼:

  1. 做出決定,將儲存在攝氏溫度
  2. 創建名爲我的天氣預報模型虛擬屬性:air_temp_imperial
  3. 使用一個setter稱爲air_temp_imperial該做的從英制轉換爲攝氏,然後將其值保存到:air_temp
  4. 使用getter air_temp_imperial將轉換後的攝氏度返回到英制值

然後在我的意見中我檢查了current_user首選項帝國?價值來修改我的演示文稿和表單。

我不確定它是否正確,但似乎有效。