场景
更新:我注意到,按created_at
排序实际上会比较一个足够分辨率的毫秒浮点值(到目前为止)。然而,尽管我现在觉得有点笨,但我的问题仍然存在。我的场景无关紧要,所以我删除了它。
问题
我知道数据库通过跟踪一行的ID来精确地知道创建顺序。
依赖最新ID来确定订单是否存在陷阱
更好的解决方案是用比一秒更精确的东西替换latest_post_at。Time.now.to_f
而不是.to_i
将为您提供亚秒精度(我认为是毫秒,文档不清楚)。如果两个帖子碰巧有相同的毫秒时间戳,您可以使用id作为平局决胜局。
如果您使用的是为数据库生成自动递增代理主键的"自然"方式,那么唯一会想到的陷阱是,数据库序列发生器生成ID的顺序可能不是创建Post
记录的事务开始或结束的顺序。(或者,您可以定义"创建"帖子的时间。)
考虑到交易通常需要几分之一秒才能完成,这种不确定性可能与您的需求无关。