这是我的模特:
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>
我知道内部的一切都存储为字符串,这可能就是问题所在。看起来很奇怪,库中或者某些贡献宝石都没有做到这一点。
有什么建议吗?
答案 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_at
和updated_at
:
class Thing < Ohm::Model
include Ohm::Timestamps
index :created_at
end
然后您可以按照前面示例中的created_at
进行排序,但在这种情况下,您无需传递created_at
值,因为每次创建模型时都会自动分配该值。