ruby-on-rails - Rails created_at 时间戳顺序与 id 顺序不一致

标签 ruby-on-rails

我有一个 Rails 2.3.5 应用程序,其中包含一个包含 id 和 created_at 列的表。该表记录了实体随时间的状态变化,因此我偶尔会使用它来查找特定时间实体的状态,通过查找该时间之前发生的状态变化,并根据 created_at 时间戳选择最新的状态。
对于 1445 个实体中的 10 个,状态更改的时间戳与 id 的顺序不同,并且最后一个状态更改的状态与实体本身存储的状态不同,例如

  id  |     created_at      | entity_id | state |
------+---------------------+-----------+-------+
 1151 | 2009-01-26 10:27:02 | 219       | 1     | 
 1152 | 2009-01-26 10:27:11 | 219       | 2     | 
 1153 | 2009-01-26 10:27:17 | 219       | 4     | 
 1154 | 2009-01-26 10:26:41 | 219       | 5     | 

我可能可以通过订购 id 而不是时间戳来解决这个问题,但想不出关于它是如何发生的解释。该应用程序使用多个杂种实例,但它们都在同一台机器上(Debian Lenny);我错过了一些明显的东西吗? DB 是 Postgres。

最佳答案

因为 Rails 正在使用 database sequence为您的 id 获取新 ID insert 上的字段(至少在 PostgreSQL 中)或使用 RETURNING 关键字(如果数据库支持)。

但它更新了created_atupdated_at使用 ActiveRecord::Timestamp#create_with_timestamps 创建的字段使用系统时间的方法。

1154稍后插入,但 created_at 的时间戳字段是之前计算的。

关于ruby-on-rails - Rails created_at 时间戳顺序与 id 顺序不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5818463/

相关文章:

sql - Rails 5 查询以从我当前正在查看的帖子以外的同一类别中提取帖子

ruby-on-rails - Sidekiq 超时

ruby-on-rails - 如何在 ruby​​ 递归调用期间保持值(value)

mysql - Rails Octopus Gem - 从站关闭时的主从复制连接行为

ruby-on-rails - 了解 Rails 指南关联示例

jquery - Ruby on Rails 安装 JQuery

ruby-on-rails - 将 sitemap_generator 与不同的区域设置 url 一起使用

ruby-on-rails - Big Decimal 存储为 60.00,返回为 0.0?

ruby-on-rails - rails : Allow user to switch between different views using selection

ruby-on-rails - 如何使用 rspec 和 Ruby 测试父类(super class)方法抛出异常