【问题标题】:before_validation not being called?before_validation 没有被调用?
【发布时间】:2015-08-31 22:31:12
【问题描述】:

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

我正在调查一个错误并设置了一些日志记录(通过 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

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

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

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

  • .connexions.create()
  • connexion.attr = "值";连接。保存!
  • connexion.update_attributes(attr: "value")

【问题讨论】:

  • 试试Connexion.new(params).valid?。你会看到什么?
  • irb(main):022:0> Connexion.new.valid? [Rollbar] 调度有效负载 [Rollbar] 详细信息:rollbar.com/instance/uuid?<uuid> [Rollbar] 发送有效负载 => true irb(main):023:0> [Rollbar] 成功 => 模型有效 & 数据发送到 rollbar => 一切正常不错
  • 也许,Rollbar.log 得到:connexion_id =&gt; nil 后什么都不做?尝试在您的 save_info_in_rollbar 方法中放入或提出某些内容
  • 它实际上是在没有 ID 的情况下进行记录(我也可以看到数据,只是 ID 列为零)
  • 试着举起或放些东西。是否仍有意外行为?

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      第三,仔细检查数据。

      【讨论】:

      • 1/ 我知道。这是一个约定,我们必须把 self.在处理属性时,以便我们可以更轻松地区分属性和变量;) 2/ 有 3 种情况会创建或更新连接,这些情况是: - .connexions.create() - connexion.attr = "值";连接。保存! - connexion.update_attributes(attr: "value") 3/ 我的数据已损坏。这就是为什么我首先要做一些调试;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 2019-03-31
      • 2012-12-16
      • 2015-03-28
      相关资源
      最近更新 更多