ruby-on-rails - 由于参考错误,无法创建有效的 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 时出现相同的错误。应用程序也会出现同样的结果。
我一直不知道如何解决这个问题,任何帮助将不胜感激。
解决方案
我相信我已经想出了如何解决这个问题。我不确定为什么初始化程序中的配置不起作用,但是在 belongs_to :model_a 我将其更改为:
belongs_to :model_a, optional: true
推荐阅读
- r - 将一个矩阵中的值替换为另一个矩阵中的值
- python - SyntaxError:我编写 docker 容器时语法无效,但应用程序在没有 docker 的情况下工作正常
- php - 如何通过php中的数据库调用检查变量中的字符存在
- parallel-processing - DSP 中的零开销循环
- macos - 如何查看在解析 @rpath 对库的引用时搜索的应用程序中嵌入的位置列表?
- angular - 如何将我的应用程序连接到 firebase 功能并让 nodemailer 将我的联系表通过电子邮件发送给我?
- python-3.x - Python gnupg:删除密钥期间出现“No Pinentry”错误
- json - YouTube Data API (v3) 搜索分页,返回“items”为空
- nativescript - Nativescript listview 选择/取消选择显示/隐藏复选框
- database - 将数据库保存在容器中是一种反模式吗?