首页 > 解决方案 > 在 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返回零?

标签: ruby-on-railsmongodbmongoid

解决方案


您缺少关联上的类名:

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 没有知道哪个是正确的方法。


推荐阅读