在 rails 引擎 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 属性访问其父级时,它返回 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 无法知道哪个是正确的。