created_at字段何时被分配了时间戳?创建模型对象时,或db事务完成时?
基本上我想确保我可以依赖数据库的顺序一致性(Postgres)。举个例子:我有一个聊天系统,用户可以通过时间戳来获取新消息(也就是说 - 给我所有比时间X更新的消息) - 我想确保用户看到数据库的一致快照。
答案 0 :(得分:0)
ActiveRecord回调after_validation
和before_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)的更多信息。