回调中缺少关系

Missing relation in callback

所以我有模型 ModelA,其中 has_many 模型 B。 我已经向 ModelB 添加了一个回调,我不想在其中检查某些现有关系。然后在回调中我想创建一个额外的关系。 (涉及更多逻辑,但为了简单起见,我保持这种方式)

我现在面临的问题是,在 after_save 回调中存在接缝,例如现有关系丢失,结果是我在那里有重复的条目。

我什至试图检查 ModelB.where(some_attribute: "some value").exists? 之类的 ModelB 条目是否存在,但找不到。我在 after_save 回调中设置了一个断点,同时打开了一个 rails 控制台,在控制台中我得到了正确的条目,但在回调中没有。

我的猜测是,虽然在回调中我目前正在进行交易,但为什么所有关系都丢失了?另外我怎么能逃避这笔交易?

class ModelA
  has_many :model_bs

  after_save do
    self.model_bs.where(some_attribute: "some value").first_or_create!
  end
end

class ModelB
  belongs_to :model_a
end

所以我找到了答案,正如 this answer 中所解释的那样,回调似乎是在 where 的范围内执行的。因此,它通过在无范围块内执行回调代码来工作。

class ModelA
  has_many :model_bs

  after_save do
    ModelB.unscoped do
      self.model_bs.where(some_attribute: "some value").first_or_create!
    end
  end
end