在我的Rails应用程序,我有以下几点: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
- 我得到一个错误,该模型缺少来自原始Post
的属性。
更多的线索:
- 我只用
MyModule::Models::Post
的MyModule
范围内,调用Models::Post
, - 我从来没有使用
MyModule::Models::Post
的lib之外。 - 所有“不同”的车型都保存在一个文件中,
lib/my_module/models.rb
- 如果我登录到一个失败规范中的一个
pry
会议,其中红宝石吹嘘MyModule::Models::Post
没有从Post
领域应该有(但场前行取而代之):拨打MyModule::Models::Post
返回我确切的原始Post
模型类!
我错过了什么?这是rspec问题吗?我搞乱了会议还是什么?
更新1。我试图拆分Models
模块,将每个附加模型放入一个单独的文件中。没有运气 - 同样的错误
更新2。另一个想法是:由于Comment
模型在Post
之前定义,所以Ruby首先尝试加载原始的Post
。不过,移动Post
模型并没有帮助。
更新3。 RSpec有this提交。不过,更新Gemfile的rspec-mock
指向github没有帮助。
遗憾的是,并没有帮助:( – gmile 2013-02-13 13:12:09