Из документов требуется , а не , что «все объекты одного типа».В нем говорится:
Другой должен быть объектом даты или числовым значением в качестве астрономического юлианского числа дня.
Так что для доброкачественного значения, которое гарантированно будет раньше/ после любой даты, вы можете использовать -Float::INFINITY
и Float::INFINITY
соответственно.
DateTime.now > Float::INFINITY #=> false
DateTime.now > -Float::INFINITY #=> true
РЕДАКТИРОВАТЬ:
Итак, нам нужно решение, которое работаетв Ruby 1.9 и Rails 3.2.9, да ...
Ну, причина, по которой вышесказанное не сработает, в том, что этот monkeypatch в ActiveSupport :
class DateTime
def <=>(other)
super other.to_datetime
end
end
Это особенно проблематично.К сожалению, вам может понадобиться просто использовать " очень большое / маленькое число " вместо ...
Однако , если вы можете немного обновитьна Rails 3.2.13 (или примените обновленный monkeypatch вручную), где сигнатура метода была изменена на:
class DateTime
def <=>(other)
super other.kind_of?(Infinity) ? other : other.to_datetime
end
end
...Тогда вы можете использовать Date::Infinity
(TIL, это вещь) вместо Float::Infinity
, и эта «исправленная» версия метода теперь обрабатывает его правильно:
DateTime.now > Date::Infinity.new #=> false
DateTime.now > -Date::Infinity.new #=> true