私の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、モデルに元の属性がないというエラーが発生しますPost。
追加の手がかり:
- 私はスコープ
MyModule::Models::Post内でのみ使用し、、を呼び出しますMyModuleModels::Post - 私は
MyModule::Models::Postlibの外で使用することはありません。 - すべての「異なる」モデルは1つのファイルに保存されます。
lib/my_module/models.rb - 失敗した仕様のセッションにログインすると、
pryrubyMyModule::Models::Postがフィールドを持たないことを自慢する行の前に(ただし、Post代わりにフィールドがあります)、呼び出すとMyModule::Models::Post正確な元のPostモデルクラスが返されます!
私は何が欠けていますか?これはrspecの問題ですか?私は慣習か何かを台無しにしていますか?
アップデート1。モジュールを分割しModelsて、すべての追加モデルを個別のファイルに入れようとしました。運がない–同じエラー
アップデート2。別の考えは、Commentモデルは以前に定義されているためPost、Rubyは最初にオリジナルをロードしようとするというものPostでした。それでも、Postモデルを上に移動しても効果はありませんでした。
アップデート3。RSpecにはこのコミットがありました。それでも、Gemfilerspec-mockをgithubからポイントするように更新しても効果はありませんでした。