Monkey Patch Date класс лучший вариант? - PullRequest
0 голосов
/ 18 июня 2011

В моем приложении я хочу поддерживать пустое поле даты, что означает «некоторая неопределенная дата в будущем», как при входе, так и при просмотре.Так как я храню это в базе данных и сортирую nil до любой даты, отличной от nil, я решил обезопасить класс Date, чтобы реализовать метод «max_value», который возвращает «1/1/10000» (дату, которую я выбрал дляпредставлять неопределенную дату в будущем).Я перегрузил +, -, to_s и другие операторы / методы, чтобы вести себя соответствующим образом с этим значением.Затем я добавил в модель обратный вызов before_save для преобразования любых пустых дат в Date.max_value.Кажется, что все это работает (за исключением нескольких ошибок, которые я пытаюсь решить), но есть ли лучший способ сделать это без мартовских исправлений класса?

1 Ответ

3 голосов
/ 18 июня 2011

Значение, которое вы ищете: 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
...