2011-06-17 4 views
0

私のアプリケーションでは、入力時と表示時の両方で、「未定義の未来の日付」を意味する空白の日付フィールドをサポートしたいと考えています。私はこれをデータベースに格納しており、日付がnil以外の日付の前にnilソートしているので、 "1/1/10000"を返す "max_value"メソッドを実装するために、Dateクラスにモンキーパッチを適用することにしました将来不確定な日付を表す)。私は+、 - 、to_s、およびこの値で適切に動作する他の演算子/メソッドをオーバーロードしています。私はモデルにbefore_saveコールバックを追加して空の日付をDate.max_valueに変換しました。これはすべてうまくいくように思えますが(私が解決しようとしているいくつかのバグは例外ですが)、クラスを猿でパッチすることなくこれを行う良い方法がありますか?モンキーパッチ日付クラスは最高のオプションですか?

答えて

3

あなたが探している値はnullです。 Dateのような基本クラスをオーバーライドするだけで、トラブルを救うことができます。

が代わりにクエリ

SELECT * FROM Mystery_Events ORDER BY ISNULL(some_event_date,'1/1/10000') ASC 

でそれを行う、あなたは答えのために

ORDER BY (case WHEN some_event_date IS NULL THEN 1 ELSE 0 END), some_event_date, some_other_sorting_field_to_give_order_to_the_nulls ASC 
+0

感謝を使用することができ、そして私はあなたと1つのビットを反対していません。私はモンキーパッチに挑戦しようとすると何度も噛まれ、やがて逃げる方法を見つけられなくなりました。私はそれが悪い考えであることをちょっと知っていました。それが私が質問して、他のアプローチを聞く理由です。しかし、それは全体的に啓発的な経験でした。 –

+0

しかし、私は、昨日と明日のメソッドのためのいくつかのオーバーライドを残しました。私は、彼らが遅い間に間違った価値を生み出すように見えることを発見しました - ローカル値の代わりにUTC値を生成するような、タイムゾーンの問題があると思われます。 –

+0

私はいつも昨日/ tomarrowが+/- 24時間の短い手だったと思った...これは本当ですか? – colinross

関連する問題