Ruby on rails 由于引用错误,无法创建有效的ActiveRecord模型
我有一个gem,它有两个活动记录模型Model a和Model B。如果另一个字段为true,Model B必须引用Model a,如果另一个字段为false,则不能引用Model aRuby on rails 由于引用错误,无法创建有效的ActiveRecord模型,ruby-on-rails,Ruby On Rails,我有一个gem,它有两个活动记录模型Model a和Model B。如果另一个字段为true,Model B必须引用Model a,如果另一个字段为false,则不能引用Model a validates_presence_of :model_a_id, if: :external validates_absence_of :model_a_id, unless: :external 我们的gem是使用。当通过燃烧运行发动机或gem时,一切正常。我们可以在所有实例中创建模型B。当我们的gem被
validates_presence_of :model_a_id, if: :external
validates_absence_of :model_a_id, unless: :external
我们的gem是使用。当通过燃烧运行发动机或gem时,一切正常。我们可以在所有实例中创建模型B。当我们的gem被我们的其他应用程序使用时,如果外部为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,则不会发生任何更改。当运行combustion时,我可以创建外部设置为false的模型B。当运行应用程序时,我仍然无法创建模型B,错误与上面相同
当我将此配置项放入gem并将其设置为true时,我无法再创建模型B,错误与通过应用程序运行gem时相同。应用程序也会出现同样的结果
我一直在为如何解决这个问题而困惑,如果能得到任何帮助,我将不胜感激。我相信我已经找到了解决这个问题的方法。我不确定初始化器中的配置为什么不起作用,但在属于:型号a上,我将其更改为:
belongs_to :model_a, optional: true
无论如何,我强烈推荐这种解决方案,乱搞
属于\u所需的\u默认值=false
,并且(IMO)只是在自找麻烦和困惑。