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