ruby-on-rails mongoid相当于加载?

3zwtqj6y  于 2022-11-19  发布在  Ruby
关注(0)|答案(3)|浏览(194)

在Rails应用程序中,使用ActiveRecord和mysql,您可以检查是否已经加载了关联:

class A
    belongs_to :b

a = A.find(...
a.b.loaded? # returns whether the associated object has been loaded

mongoid中是否有一个等价物?._loaded?曾经有效,但现在不再有效。
UPDATE -添加示例

class A
    include Mongoid::Document
end

class B
    include Mongoid::Document
    belongs_to :a
end

a = A.new
b = B.new
b.a = a
b.a._loaded?

退货:

ArgumentError (wrong number of arguments (given 0, expected 1))
hs1ihplo

hs1ihplo1#

它是这个类的一个可枚举方法:Mongoid::关系::目标::可枚举

_loaded?

它将返回true和false,如果可枚举对象是否已加载?如果条件已执行或我们手动加载了整个对象,则返回true。

ut6juiuv

ut6juiuv2#

现在(Mongoid7.0)_loaded?()是一个私有方法,在我的例子中,它总是返回true。
我能找到的最好的是
ivar()
:如果已经加载,则返回该对象;如果没有加载,则返回false。
我不确定这是否是一个可靠的解决方案,它取决于ivar()的进一步可用性和对象作为示例变量存储的方式。

> b = B.find('xxx')
  => (db request for "b")
> b.ivar('a')
  => false
> b.a
  => (db request for "a")
> b.ivar('a')
  => (returns "a" object, as when b.a is called)
bsxbgnwa

bsxbgnwa3#

您可以测试是否已将includes(:your_association)添加到条件中,如下所示:

inclusions = Criteria.inclusions.map(&:class_name)
inclusions.include?('YourAssociation)

例如:

Children.all.include(:parent).inclusions
=> [<Mongoid::Association::Referenced::BelongsTo:0x00007fce08c76040
  @class_name="Parent", ...]

Children.all.inclusions
=> []

相关问题