gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:58:14 27 4
gpt4 key购买 nike

给定一个带有如下扩展的简单嵌入关系:

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

basedocumented但文档之所以存在,是因为它是使用 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 的一些 grepping 使我找到了 @base(以及相应的 attr_reader :base 调用)并且一个快速实验验证了 base 是我要找的。

关于mongoid - Mongoid 嵌入式关系扩展中的父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21071266/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com