在我的 Rails 应用程序中,我有以下内容:
Post模型class Post < ActiveRecord::Base # ... endPost在这样的模块中建模# lib/my_module/models.rb module MyModule module Models class AbstractTable < ActiveRecord::Base self.abstract_class = true end class Comment < AbstractTable belogs_to :post end class Post < AbstractTable has_many :comments end end end
两种Post模型都有不同的字段集并连接到不同的数据库:
Post-> Postgresql 适配器MyModule::Models::Post-> SQLite 适配器
有时(取决于种子值),在运行测试套件时,我得到一个超级奇怪的常量(?)冲突:在Post提到原始常量的地方(在创建/更新操作中)我得到错误,它缺少来自的字段MyModule::Models::Post,而在MyModule::Models::Post提到的地方——我得到一个错误,模型缺少来自 origin 的属性Post。
补充线索:
- 我只在范围内使用
MyModule::Models::Post,MyModule调用Models::Post, - 我从不
MyModule::Models::Post在库之外使用。 - 所有“不同”的模型都保存在一个文件中,
lib/my_module/models.rb - 如果我登录到一个
pry失败的规范的会话,在 ruby 吹嘘MyModule::Models::Post它没有应该有的字段(而是来自Post而不是字段)的行之前:调用MyModule::Models::Post返回给我确切的原始Post模型类!
我错过了什么?这是一个 rspec 问题吗?我是在搞砸约定还是什么?
更新 1。我试图拆分Models模块,将每个附加模型放入一个单独的文件中。不走运——同样的错误
更新 2。另一个想法是:由于Comment模型是之前定义的Post,Ruby 尝试首先加载原始模型Post。尽管如此,将Post模型向上移动并没有帮助。
更新 3。RSpec 有这个提交。尽管如此,从 github 更新 Gemfilerspec-mock并没有帮助。