Патч обезьяны для created_at

Пытаюсь написать патч обезьяны, чтобы добавить метод для created_at.

Я создал файл date_time_extras.rb и поместил его в каталог lib с содержимым:

class DateTime
  def beginning_of_hour
    change(:min => 0)
  end
end

С консоли делаю:

record.created_at.beginning_of_hour

Но это приводит к ошибкам, связанным с отсутствием метода. Похоже, created_at не является datetime? Потому что DateTime.new.beginning_of_hour работает, а record.created_at.class дает ActiveSupport::TimeWithZone.

Итак, как мне написать патч обезьяны для дат типа created_at?

Я использую рельсы версии 3.0.10.

Обновить

Также пробовал

module ActiveSupport
  class TimeWithZone
    def beginning_of_hour
      change(:min => 0)
    end
  end
end

но безрезультатно


person CambridgeMike    schedule 08.05.2012    source источник
comment
Хорошо ... А пока, похоже, я могу просто использовать record.created_at.change(:min => 0)   -  person CambridgeMike    schedule 09.05.2012


Ответы (1)


Вы пробовали объявить это в class Time?

class DateTime
  def beginning_of_hour
    change(:min => 0)
  end
end

TimeWithZone похоже, что он делегирует свой объект времени Time, а не DateTime.

Также TimeWithZone содержит не только объект @time, поэтому вам придется сделать что-то вроде

module ActiveSupport
  class TimeWithZone
    def beginning_of_hour
      self.time.change(:min => 0)
    end
  end
end

Но я не уверен на 100% в этом коде.

person Azolo    schedule 09.05.2012