使用Rails 5和Mongoid 7,我有一个类ItemQuantity,其中的对象具有对Item
的{{1}}引用,对其他事物的多态belongs_to
以及几个标量字段。我必须对这些元素的任意集合进行一些复杂的更改-有时以Mongoid::Criteria
的形式出现,有时以Mongoid::Association::Referenced::HasMany::Targets::Enumerable
的形式出现,但是这两种形式都响应ItemQuantity中定义的类方法。
但是,某些复杂的操作只能在集合上作为数组来完成。我正在链接方法,并希望能够继续在这些集合上调用类方法。
我尝试使用以下方法将数组简单地转换回Targets::Enumerable
:
def self.from_array(array)
Mongoid::Association::Referenced::HasMany::Targets::Enumerable.new(array)
end
(抱歉缩进不好,编辑器不会将缩进版本作为代码块)
奇怪的是,如果我以预期的方式使用此类,即:
inventory.item_quantities.some_class_method
有效。但是,如果我自己构造它,则通过实例化Enumerable
类,它将为类NoMethodError
提供一个Array
,表明它无法访问ItemQuantity类方法。我尝试传递base
和association
参数,但这些参数在工作关联对象上也无效。我还没有发现有效的对象与无效的对象之间的区别。
如何将Mongoid文档数组转换回可以访问Mongoid类方法的对象?
我考虑过:
belong_to
,但看起来很草率