0

私は Rails に比較的慣れていないので、気象データを扱うアプリケーションを作成しています。私の主な用途は米国内であるため、ユーザーへのプレゼンテーションはおそらく華氏で行われます。私が消費するデータ フィードは摂氏です。

これを解決する通常の方法はcelsius、モデルに列を作成してfahrenheitから、F から C に変換するカスタム モデル メソッドを使用することです。ただし、さまざまな設計上の決定により、温度の特定のフィールドはありません。(tl;dr 天気だけでなく、さまざまな環境条件を追跡しているので、一般的なvalue列と列がありtypeます。)

いくつかの選択肢があります:

  1. F を内部に格納します。気象データ フィードを使用する場合にのみ C に変換します。健全な測定システムを備えた地域にユーザーがいないと仮定します。
  2. C を内部に格納します。ビューで F に変換します (ユーザーの設定が F を表示することである場合)。value私が見る限り、変換する数式は Rails ビューと JS の両方で実装する必要があるため、これは注意が必要です。
  3. C を内部に格納します。コンテキストに応じて F に変換します。つまり、type温度が温度で、ユーザーが華氏を好むレコードを作成する場合before_saveは、変換を行うコールバックを実行します。読書のために何をすべきかわかりません...

これを構造化する正しい方法は何ですか?ありがとう!

4

5 に答える 5

6

内部に1 つのフォームを保存すると、国際的に標準化されたセルシウス スケールになるはずです。

それ以外はプレゼンテーションの問題です。

于 2012-09-17T07:30:09.487 に答える
1

データベース内の1つのプレゼンテーション(CまたはF)に保存し、JSでクライアント側に変換します。これにより、機能をコーディングするのも簡単になり、ユーザーはサーバーへのラウンドトリップなしでCとFを切り替えることができます。

于 2012-09-17T07:32:34.973 に答える
1

これが私がしたことです:

  1. 温度を摂氏で保存することにしました
  2. 天気予報モデルに :air_temp_imperial という仮想属性を作成しました
  3. 帝国から摂氏への変換を行い、値を :air_temp に保存する air_temp_imperial と呼ばれるセッターを使用しました
  4. getter air_temp_imperial を使用して、変換された摂氏を帝国値に返しました

次に、ビューで current_user 設定のインペリアルを確認しましたか? プレゼンテーションとフォームを変更するための値。

それが正しい方法かどうかはわかりませんが、うまくいくようです。

于 2014-11-04T17:58:24.680 に答える
0

私は@Alnitakが与えた非常に一般的な反応について少し瞑想し、何をする必要があるかを考え出しました. タイプがありtemperatureます。だから私はそのタイプをそのままにして、それを摂氏にします。次に、新しいタイプを追加しtemperature_fahrenheitます。次に、モデルに F から C への変換を行う :before_save コールバックがあります。そうすれば、内部データは常に摂氏のままですが、フォームを華氏で簡単に送信できます。

今では明らかなようですが、しばらくの間私を逃れていました。

于 2012-09-20T04:49:06.880 に答える