before_validation 没有被调用?

before_validation not being called?

我遇到了一个奇怪的问题,找不到合乎逻辑的解释。

我正在调查一个错误并放置一些日志记录(通过 Rollbar),这样我就可以看到我的模型之一的一些实例的演变。

这是我得到的:

class Connexion < ActiveRecord::Base
    before_validation :save_info_in_rollbar
    after_save :save_info_in_rollbar

    def save_info_in_rollbar
      Rollbar.log("debug", "Connexion save", :connexion_id => self.id, :connexion_details => self.attributes)
    end
end

现在我在 rollbar 中获取大量数据(每次连接 created/updated 时几乎有 2 行)。但奇怪的是:对于某些连接(=> 正是我正在调查的那些有错误数据的连接),我根本没有得到任何数据!

我不明白如何创建连接并将其持久保存到数据库,并且没有任何 before_validation 日志记录的踪迹。 看起来回调没有被调用,但除非我弄错了,否则它应该是回调顺序中的第一个 => 什么可以阻止它被调用?

编辑 >> 从回复中复制粘贴,可能相关: 创建或更新连接的情况有 3 种,这些情况是:

回调不会 运行 的唯一情况是:

但是:我可能漏掉了一个案例。此外,我假设 ActiveRecord/ActiveModel 中没有错误导致此问题。

首先,在实例方法中不需要self,因为方法的范围是实例。

其次,您需要检查,您是如何将数据保存到数据库中的。您可以跳过 Rails 中的回调:Rails 3 skip validations and callbacks

第三,仔细检查数据。

抱歉问了愚蠢的问题,解释是我们有 2 个应用程序在同一个数据库上工作,而修改是由另一个应用程序进行的(当然没有发送 Rollbar 更新)。

有时候最棘手的问题有最简单的答案哈哈