あなたのモデルがここにあるのか正確にはわかりませんが、次のようなエラーを再現することしかできませんでした:
class User
include Mongoid::Document
embeds_many :classes
end
class Class
include Mongoid::Document
field :name
embedded_in :user, :inverse_of => :classes
end
それが問題である場合、問題は、Ruby 標準ライブラリから Class クラスを開き、それを Mongoid モデルに効果的に拡張していることです。意図的ではないと思います。その場合、いくつかのオプションがあります.Classクラスの名前を、標準ライブラリと衝突しない名前に変更するだけです.たとえば、これはうまくいきます:
class User
include Mongoid::Document
embeds_many :courses
end
class Course
include Mongoid::Document
field :name
embedded_in :user, :inverse_of => :courses
end
または、クラス「クラス」を本当に呼び出したい場合は、モデルを名前空間に配置できます。
module Models
class User
include Mongoid::Document
embeds_many :classes, :class_name => 'Models::Class'
end
class Class
include Mongoid::Document
field :name
embedded_in :user, :inverse_of => :classes, :class_name => 'Models::User'
end
end
これを行う場合、Mongoid に、class_name
. したがって、おそらくクラスの名前を変更するのが最も簡単です。
最初の例のように変数を使用した場合にのみ問題が発生する理由については、destroy_all メソッドがクラス コレクションを壊れた状態のままにしていることが原因であると思われます (名前の衝突の副作用)。2 番目の例では、問題が発生しないように、2 行目で User モデルの新しいインスタンスをロードしています。