给出与这样的扩展的简单嵌入关系:
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
?
答案 0 :(得分:7)
我自己回答这个问题以供将来参考。如果有人有这样做的官方和记录方式,请告诉我。
经过一个小时左右的谷歌搜索和阅读(并重新阅读)Mongoid文档后,我转向了Mongoid源代码。一些搜索和猜测引导我@base
及其访问方法base
:
embeds_many :es do
def m
base
end
end
然后你可以这样说:
d = D.find(id)
d.es.m.id == id # true
base
是documented,但文档仅在那里,因为它是使用attr_reader :base
定义的,而attr_reader
调用生成的文档并不是非常有用。 base
也适用于has_many
个关联。
我是怎么想出来的? documentation on extensions在一个示例中提及@target
:
embeds_many :addresses do
#...
def chinese
@target.select { |address| address.country == "China"}
end
end
@target
不是我们正在寻找的东西,@target
是嵌入式文档本身的数组,但我们想要该数组所在的内容。对@target
进行了一些关注,让我@base
(以及相应的attr_reader :base
来电),并通过快速实验验证base
是我正在寻找的。