由于参考错误,无法创建有效的ActiveRecord模型

时间:2018-07-12 16:20:11

标签: ruby-on-rails

我有一个具有两个活动记录模型A和B的宝石。如果另一个字段为true,则模型B必须引用Model A,如果另一个字段为false,则不能引用ModelA。

validates_presence_of :model_a_id, if: :external
validates_absence_of :model_a_id, unless: :external

我们的宝石使用combustion进行了测试。通过燃烧运行发动机或宝石时,一切正常。我们可以在所有实例中创建模型B。当我们的宝石被其他应用程序消耗时,如果 external 为false,则您将无法创建模型B,因为它会为您提供:

1 error prohibited this model_b from being saved:
  Model A must exist

以前,这是在Rails 5上工作的。在研究了为什么会发生这种情况之后,我着手研究了初始化程序中存在的这种配置。此配置存在于使用我们的gem的应用程序中,但不包含gem本身。

Rails.application.config.active_record.belongs_to_required_by_default = false

如果我将此配置项放在我的gem中,并将其设置为false,则没有任何变化。通过燃烧运行时,我可以创建外部设置为false的模型B。在运行该应用程序时,我仍然无法创建模型B,并且出现与上述相同的错误。

当我将此配置项放入gem中并将其设置为true时,将无法再创建模型B,其错误与通过应用程序运行gem时相同。该应用程序也会发生相同的结果。

对于解决该问题该怎么做感到很困惑,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

我相信我已经找到解决方法。我不确定为什么初始化器中的配置不起作用,但是在belongs_to:model_a上我将其更改为:

belongs_to :model_a, optional: true