首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Redis/Ohm按日期时间进行排序

使用Redis/Ohm按日期时间进行排序
EN

Stack Overflow用户
提问于 2014-08-20 13:08:34
回答 1查看 473关注 0票数 0

这是我的模型:

代码语言:javascript
复制
class Thing < Ohm::Model
  attribute :created_at
  index :created_at
end

我无法按日期时间(created_at)对记录进行排序。

代码语言:javascript
复制
Thing.all.order_by(:created_at)
NoMethodError: undefined method `each' for #<RuntimeError:0x0000010537dec0>

我知道在内部,一切都是以字符串的形式存储的,这可能就是问题所在。这看起来很奇怪,在图书馆里没有任何东西可以做这件事。

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-20 14:13:25

根据时间戳使用的值,通过created_at进行排序是很容易的。例如,如果使用Time.now.utc.to_i,则可以按以下方式对记录进行排序:

代码语言:javascript
复制
Thing.all.sort_by(:created_at)

如果要按降序排序,可以这样做:

代码语言:javascript
复制
Thing.all.sort_by(:created_at, :order => "DESC")

要迭代结果,可以使用each

代码语言:javascript
复制
Thing.all.sort_by(:created_at, :order => "DESC").each do |thing|
  printf("Thing created on %s\n", Time.at(thing.created_at.to_i))
end

如果安装ohm-contrib gem,您可以在模型中包含Ohm::Timestamps,它将添加和更新属性created_atupdated_at

代码语言:javascript
复制
class Thing < Ohm::Model
  include Ohm::Timestamps

  index :created_at
end

然后,您可以像前面的示例那样按created_at进行排序,但是在本例中,您不需要传递created_at值,因为每次创建模型时都会自动分配它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25405589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档