给定一个带有如下扩展的简单嵌入关系:
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了我正在寻找的东西。