0

这是我的模型:

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>

我知道内部所有内容都存储为字符串,这可能就是问题所在。看起来很奇怪,图书馆或某些 contrib gem 中没有任何东西可以做到这一点。

有什么建议吗?

4

1 回答 1

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-contribgem,你可以Ohm::Timestamps在你的模型中包含,它会添加和更新属性created_atupdated_at

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

  index :created_at
end

然后你可以created_at像前面的例子一样排序,但在这种情况下你不需要传递一个created_at值,因为它是在每次创建模型时自动分配的。

于 2014-08-20T14:13:25.547 回答