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

时间:2014-08-20 13:08:35

标签: ruby redis ohm

这是我的模特:

class Thing < Ohm::Model
  attribute :created_at
  index :created_at
end

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

Thing.all.order_by(:created_at)
NoMethodError: undefined method `each' for #<RuntimeError:0x0000010537dec0>

我知道内部的一切都存储为字符串,这可能就是问题所在。看起来很奇怪,库中或者某些贡献宝石都没有做到这一点。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

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

Thing.all.sort_by(:created_at)

如果您想按降序对它们进行排序,可以改为:

Thing.all.sort_by(:created_at, :order => "DESC")

要迭代结果,您可以使用each

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

class Thing < Ohm::Model
  include Ohm::Timestamps

  index :created_at
end

然后您可以按照前面示例中的created_at进行排序,但在这种情况下,您无需传递created_at值,因为每次创建模型时都会自动分配该值。