针对created_at的Monkey补丁

时间:2012-05-08 22:51:09

标签: ruby-on-rails-3 monkeypatching

我正在尝试编写一个猴子补丁来为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类型的日期编写猴子补丁?

我正在使用rails 3.0.10。

更新

也试过

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

无济于事

1 个答案:

答案 0 :(得分: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%肯定。

相关问题