给定一个带有如下扩展的简单嵌入关系:
class D
include Mongoid::Document
embeds_many :es do
def m
#...
end
end
end
class E
include Mongoid::Document
embedded_in :d
end
你可以这样说:
d = D.find(id)
d.es.m
在扩展的m
方法中,如何访问d
我们正在使用的特定对象?
给定一个带有如下扩展的简单嵌入关系:
class D
include Mongoid::Document
embeds_many :es do
def m
#...
end
end
end
class E
include Mongoid::Document
embedded_in :d
end
你可以这样说:
d = D.find(id)
d.es.m
在扩展的m
方法中,如何访问d
我们正在使用的特定对象?
我自己回答这个问题以供将来参考。如果有人有官方和记录在案的方式,请告诉我。
经过一个小时左右的谷歌搜索和阅读(和重新阅读)Mongoid 文档后,我转向了 Mongoid 源代码。一些搜索和猜测使我找到了@base
它的访问器方法base
:
embeds_many :es do
def m
base
end
end
然后你可以这样说:
d = D.find(id)
d.es.m.id == id # true
base
已记录,但文档仅存在于那里,因为它是使用定义的,attr_reader :base
并且从attr_reader
调用生成的文档并不是非常有用。base
也与has_many
协会合作。
我是怎么想出来的?关于扩展的文档@target
在一个例子中提到:
embeds_many :addresses do
#...
def chinese
@target.select { |address| address.country == "China"}
end
end
@target
不是我们要找的,@target
是嵌入文档的数组本身,但我们想要那个数组在里面。对 for 的一些探索@target
让我@base
(以及相应的attr_reader :base
电话)和一个快速的实验验证base
了我正在寻找的东西。