在我的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