我有一个这样的代码:
Foo.order(:posted_at).last.posted_at
我学会了更好的写作方式。
Foo.maximum(:posted_at)
但我注意到maximum
返回Time
个对象,而另一种方式返回ActiveSupport::TimeWithZone
,据我所知,Rails基本上返回TimeWithZone
。为什么maximum
会返回正常的Time
个对象?
Foo.maximum(:posted_at).class
# Time < Object
Foo.order(:posted_at).last.posted_at.class
# ActiveSupport::TimeWithZone < Object
答案 0 :(得分:0)
这是Activerecord
问题。转化为ActiveSupport::TimeWithZone
是在model
级别实施的。试试控制台:
model_instance = MyModel.new
t = Time.now # not Time.current
model_instance.created_at.class
t.class # Time
model_instance.created_at = t
model_instance.created_at.class # ActiveSupport::TimeWithZone
maximum
(count
,sum
等)implementation与model
不相交,并且不进行此类投射。