Rails created_at updated_at / created_on updated_on

tianshuai · 2013年05月23日 · 最后由 simlegate 回复于 2013年06月02日 · 4003 次阅读

rails 里 mongoid 生成的时间格式默认都是 created_at 和 updated_at 这种标准的日期格式,好像 ActiveRecord 也是这样,本人觉得 created_on 和 updated_on 这种时间戳格式不论是排序还是比大小都要优于前一种格式,如果真是这样为什么默认生成的不是时间戳格式?不知道大家是怎么看的?是否可以改 mongoid 源码来支持这种格式或通过 gem 插件来实现?

看不明白…

难道你的意思是想要

fields.delete("created_at")
field :created_on, as: :created_at

看不懂这样改个名字有啥优势……

#1 楼 @huacnlee #2 楼 @aptx4869 不好意思,我表达的不太好,我记得看过一篇文章,生成 created_at 或 updated_at 一般都是标准的时间格式,如:ISODate("2013-05-23T14:59:44.379Z"),而 updated_on 或 updated_on 一般生成是整型的时戳,如:1369321616,我觉得生成整型时间戳格式在排序或比较大小的速度要优于那种日期格式,而 mongoid 的 Mongoid::Timestamps 创建或更新时默认生成的是 created_at 和 updated_at 的这种时间格式 ISODate("2013-05-23T14:59:44.379Z"),如果换作另一种方式可能需要改 mongoid 源码或依靠 gem 插件的支持了。呵呵,有点罗嗦、小题大作了

就是 Time.now.utc 而已 https://github.com/mongoid/mongoid/blob/master/lib/mongoid/timestamps/updated.rb

def set_updated_at self.updated_at = Time.now.utc unless updated_at_changed? end

实际储存会转换成 mongodb 本身的时间类型

排序可以用 id 来搞

不建索引,哪怕你用数字型的日期也一样有问题

#4 楼 @Rei #6 楼 @huacnlee 感谢两位大牛的指点,上 github 看源码确是一目了然,以后还要多多学习!

#5 楼 @huacnlee 因为我们项目除了 user 表都是 mongodb 自动生成的 ObjectId,所以很多排序都是靠的 created_on 和 updated_on,对于社交类网站这两个用的也非常多,而且我最早接触项目到现在,无论是 mysql 还是 mongodb,存储时间上几乎都用的整型的时间戳格式,调取时再按需要格式化输出,可能用的习惯了

#4 楼 @Rei 能不能在 lib 下写个方法或 module 覆盖或重载官方的一些东西?如改为:

def set_updated_at
  self.updated_on = Time.now.to_i unless updated_at_changed?
end

#9 楼 @tianshuai 我没试过,你可以试试。还要把

field :updated_at, type: Time

这句改成 Integer。

如果是覆盖的话,还要注意 gem 升级的时候是否兼容。这个模块很小,也可以写个自己的模块,像这些

https://github.com/ruby-china/ruby-china/tree/master/app/models/mongoid

没看懂什么是 created_on 和 updated_on?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号