基本上,我的查询是说记录的 created_at 大于它自己的 created_at。
irb(main):025:0> u = User.first
User Load (1.0ms) SELECT "users".* FROM "users" LIMIT 1
=> #<User id: 1, email: "my@email.com", encrypted_password: "stuff...", created_at:
"2012-02-01 18:56:45", updated_at: "2012-03-17 21:10:13">
irb(main):026:0> User.where("created_at > ?", u.created_at).include? u
User Load (1.0ms) SELECT "users".* FROM "users" WHERE (created_at > '2012-02-
01 18:56:45.740392')
=> true
显示的查询清楚地表明这是一个日期时间格式问题......当它构建查询时,它会四舍五入一秒。我可以修改查询以通过 created_at 可预测/一致地对其进行排序吗?
我已经讨论了其他一些讨论 ActiveRecord 精度和建议 strftime 等的问题,但我无法让它可靠地工作。我在开发中使用 SQLite(我上面的控制台引用)和在生产中使用 Postgres。
注意:这里更广泛的目标是添加#next
和添加#previous methods
到我的大部分/所有资源,以便我可以在我的管理菜单中更轻松地遍历它们。如果有另一种方法可以实现可靠的默认订单,我愿意接受。
:name
当我传递非时间戳参数#next
(:created_at
如
def previous(column = :created_at)
self.class.first(:conditions => ["#{column} < ?", self.send(column)], :order => "#{column} desc")
end
def next(column = :created_at)
self.class.first(:conditions => ["#{column} > ?", self.send(column)], :order => "#{column} asc")
end