回调中缺少关系
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
所以我有模型 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