我不确定您的模型到底是什么,但我只能重现您遇到的错误,如下所示:
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
或者,如果您真的想要调用您的类“Class”,您可以将模型放在命名空间中:
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 方法使类集合处于损坏状态(名称冲突的副作用)。在您的第二个示例中,第二行正在加载 User 模型的新实例,这样就不会出现问题。