【问题标题】:Which callback does ActiveRecord use to record timestamp?ActiveRecord 使用哪个回调来记录时间戳?
【发布时间】:2013-07-09 14:16:57
【问题描述】:

我只是想知道你们中是否有人知道 ActiveRecord 何时使用它的“魔法”来记录时间戳(例如 created_at、updated_at)。

我的意思是什么时候,在哪个回调? (如果 AR 完全使用回调)。

我问这个是因为我想创建一个自动更新列(记录每个对象的序号)并且我想尽可能多地复制 AR 方式来做到这一点。

编辑: 似乎 AR 在 after_validation 和 before_create/before_update 之间进行。您可以通过为 created_at 列创建存在验证并插入带有空白 created_at 的新记录来对此进行一些测试,它会返回错误。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 activerecord


    【解决方案1】:

    我不知道 AR 是在哪里做的,但你描述的正确位置听起来像 before_create

    【讨论】:

    • hmm.. 我已经尝试通过为“created_at”放置存在验证并返回错误。似乎 AR 是围绕 after_validation 和 before_create/before_update 进行的。
    【解决方案2】:

    在 Rails 3.2.12 中,此代码位于 lib/active_record/timestamp.rb

    正如您在问题中提到的和 DGM 建议的那样,Rails 将在创建或更新时更新时间戳,因此将您的代码粘贴在 before_createbefore_update 中应该可以工作。

    您可能还想看看the ActiveRecord counter_cache functionality。 ActiveRecord 支持创建可以自动递增/递减的列。此外,您可以执行more complicated logic

    【讨论】:

      猜你喜欢
      • 2016-11-27
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      相关资源
      最近更新 更多