Mongoid嵌入式关系扩展中的父对象

mu *_*ort 3 mongoid mongoid3 embedded-documents

给定与这样的扩展的简单嵌入关系:

class D
  include Mongoid::Document
  embeds_many :es do
    def m
      #...
    end
  end
end

class E
  include Mongoid::Document
  embedded_in :d
end
Run Code Online (Sandbox Code Playgroud)

你可以这样说:

d = D.find(id)
d.es.m
Run Code Online (Sandbox Code Playgroud)

在扩展程序的m方法中,如何访问d我们正在使用的特定内容?

mu *_*ort 7

我自己回答这个问题以供将来参考.如果有人有正式和记录的方式这样做,请告诉我.


经过一个小时左右的谷歌搜索和阅读(并重新阅读)Mongoid文档后,我转向了Mongoid源代码.一些搜索和猜测引导我@base及其访问方法base:

  embeds_many :es do
    def m
      base
    end
  end
Run Code Online (Sandbox Code Playgroud)

然后你可以这样说:

d = D.find(id)
d.es.m.id == id # true
Run Code Online (Sandbox Code Playgroud)

base记录在案但文档只是那里,因为它使用定义attr_reader :base和生成的文档attr_reader调用是不是非常有用.base也与has_many协会合作.


我怎么知道这个?有关扩展文档@target在一个示例中提到:

embeds_many :addresses do
  #...
  def chinese
    @target.select { |address| address.country == "China"}
  end
end
Run Code Online (Sandbox Code Playgroud)

@target不是我们正在寻找的,@target是嵌入式文档本身的数组,但我们想要的是该数组所在的内容.有点贪图@target引导我@base(和相应的attr_reader :base电话)和一个快速实验证实这base是我正在寻找的.