0

我只是假设一些 Rails 魔术会自动将带有 unix 时间 1345069440000 的传入帖子转换为后端的适当日期时间。但是,我有一个名为“start_at”的日期时间的模型事件,并且:

 e = Event.new()
 e.start_at = 1345069440000
 e.save

似乎直接发送 1345069440000 然后 mysql 将其归零。与红宝石时间相同

 e = Event.new()
 e.start_at = 1345069440
 e.save

如果我将它设置为一些任意字符串,它会更好地推断:

e.start_at = '1/1344/12'
e.save

将日期设置为“1334-12-01 00:00:00 UTC +00:00”。所以,它正在尝试。

显然,我可以在我的类中覆盖 setter,但我希望将这种行为更改得更高,以便所有控制器都支持 unix 时间,以便传递任何日期时间。

导轨 3.2,红宝石 1.9.2

4

1 回答 1

1

看起来这段代码active_record/attribute_methods/time_zone_conversion.rb正在尝试进行转换:

unless time.acts_like?(:time)
  time = time.is_a?(String) ? Time.zone.parse(time) : time.to_time rescue time
end

一种选择(尽管有点笨拙)是猴子补丁 Fixnum 添加一个 .to_time 方法:

def to_time
  Time.at(self)
end
于 2012-08-17T00:22:08.153 回答