问题描述
我正在将一些以前没有问题的代码转换为 rails 命名空间引擎,以便可以重用。这是一个目前不适合我的示例:
module MyModule
class School
include Mongoid::Document
embeds_one :student
end
end
module MyModule
class Student
include Mongoid::Document
embedded_in :school
end
end
但是,当我创建一所学校并为其分配一个学生并尝试通过 school
属性访问其父级时,它返回 nil。
school = MyModule::School.create
school.student = MyModule::Student.new
school.save!
school.student.school // return nil
school.student._parent // returns the school object
我做错了什么导致 school.student.school
返回 nil?
解决方法
您缺少关联的类名:
module MyModule
class School
include Mongoid::Document
embeds_one :student,class_name: 'MyModule::Student'
end
end
module MyModule
class Student
include Mongoid::Document
embedded_in :school,class_name: 'MyModule::School'
end
end
可以提出一个论点,即 Mongoid 应该自动解决这个问题,尽管这里的一个复杂问题是当第一个模型被加载时,另一个模型尚未定义,因此目标类可能是全局的或在命名空间中,并且Mongoid 无法知道哪个是正确的。