1

我正在尝试编写一个猴子补丁来为 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

无济于事

4

1 回答 1

0

您是否尝试在其中声明它class Time

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

TimeWithZone看起来它将其 time 对象委托给Timenot DateTime

TimeWithZone包含不仅仅是@time对象,所以你必须做类似的事情

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

但我不是 100% 确定该代码。

于 2012-05-09T01:58:47.377 回答