在我的 Rails 应用程序中,我有以下内容:
Post
模型class Post < ActiveRecord::Base # ... end
Post
在这样的模块中建模# 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
并没有帮助。