ActiveRecord created_at并强制执行顺序一致性

时间:2014-10-12 01:26:37

标签: ruby-on-rails rails-activerecord

created_at字段何时被分配了时间戳?创建模型对象时,或db事务完成时?

基本上我想确保我可以依赖数据库的顺序一致性(Postgres)。举个例子:我有一个聊天系统,用户可以通过时间戳来获取新消息(也就是说 - 给我所有比时间X更新的消息) - 我想确保用户看到数据库的一致快照。

1 个答案:

答案 0 :(得分:0)

ActiveRecord回调after_validationbefore_create可用于测试此问题。

当您创建新的模型对象时,created_at字段在after_validation回调期间为零,但在before_create回调期间出现,这表示created_at时间戳在模型实际持久存储到数据库之前记录(但在模型级验证发生之后)。

通过设置config.active_record.record_timestamps = false,您可以为此覆盖默认的rails行为。然后,您可以在所需过程中的任何位置分配created_at字段。希望这有助于回答您的问题!

以下是有关时间戳(http://api.rubyonrails.org/classes/ActiveRecord/Timestamp.html)和回调(http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html)的更多信息。