Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 由于引用错误,无法创建有效的ActiveRecord模型_Ruby On Rails - Fatal编程技术网

Ruby on rails 由于引用错误,无法创建有效的ActiveRecord模型

Ruby 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被

我有一个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被我们的其他应用程序使用时,如果外部为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)只是在自找麻烦和困惑。