首页 > 解决方案 > 由于参考错误,无法创建有效的 ActiveRecord 模型

问题描述

我有一个 gem,它有两个活动记录模型模型 A 和模型 B。如果另一个字段为真,模型 B 必须引用模型 A,如果另一个字段为假,则不能引用模型 A。

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

我们的宝石经过燃烧测试。通过燃烧运行发动机或宝石时,一切正常。我们可以在所有情况下创建模型 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,则不会发生任何变化。当通过燃烧运行时,我可以创建外部设置为 false 的模型 B。通过应用程序运行时,我仍然无法创建模型 B,并出现与上述相同的错误。

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

我一直不知道如何解决这个问题,任何帮助将不胜感激。

标签: ruby-on-rails

解决方案


我相信我已经想出了如何解决这个问题。我不确定为什么初始化程序中的配置不起作用,但是在 belongs_to :model_a 我将其更改为:

belongs_to :model_a, optional: true

推荐阅读