2012-05-08 2 views
1

Я пытаюсь написать патч обезьяны, чтобы добавить метод для created_at.Monkey patch for 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.new.beginning_of_hour работает, и record.created_at.class дает ActiveSupport::TimeWithZone.

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

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

Update

также попытался

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

без толку

+0

Welp .. в промежуточный период похоже, что я могу просто использовать 'record.created_at.change (: min => 0)' – CambridgeMike

ответ

0

ли вы пытаетесь объявить его в 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% в этом коде.