访问 rails 引擎 mongoid 中的嵌入式文档父级

Accessing embedded document parent in rails engine mongoid

我正在将一些以前没有问题的代码转换为 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 属性 访问其父级时,它 return 为零。

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 变为 return 零?

您缺少关联中的 class 个名称:

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 应该自动解决这个问题,尽管这里的一个复杂问题是当加载第一个模型时另一个模型尚未定义,因此目标 class 可能是全局或命名空间中,Mongoid 无法知道哪个是正确的。