Monkey Patch Date类是最佳选择吗?

时间:2011-06-17 21:27:41

标签: ruby date model monkeypatching

在我的应用程序中,我希望在进入和查看时支持空白日期字段,意思是“将来某个无限期”。因为我将它存储在数据库中并且在任何非零日期之前排序为零,所以我决定对Date类进行修补以实现返回“1/1/10000”的“max_value”方法(我选择的日期为代表未来的无限期日期)。我一直在重载+, - ,to_s和其他运算符/方法以适当地使用此值。然后我向模型添加了一个before_save回调,将任何空白日期转换为Date.max_value。这一切似乎都有效(除了我试图解决的一些错误),但有没有更好的方法来做这个没有猴子修补类?

1 个答案:

答案 0 :(得分: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