我有一个 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_at
和 updated_at
使用 ActiveRecord::Timestamp#create_with_timestamps
创建的字段使用系统时间的方法。
行1154
稍后插入,但 created_at
的时间戳字段是之前计算的。
关于ruby-on-rails - Rails created_at 时间戳顺序与 id 顺序不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5818463/