将数组转换为Mongoid类对象

时间:2018-08-11 02:28:16

标签: ruby-on-rails mongoid

使用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类方法。我尝试传递baseassociation参数,但这些参数在工作关联对象上也无效。我还没有发现有效的对象与无效的对象之间的区别。

https://github.com/mongodb/mongoid/blob/master/lib/mongoid/association/referenced/has_many/enumerable.rb

如何将Mongoid文档数组转换回可以访问Mongoid类方法的对象?

我考虑过:

  • 创建一个存根对象,item_quantities可以belong_to,但看起来很草率
  • 只是将数组作为参数传递给ItemQuantity方法,以便能够重用代码,但这似乎很草率
  • 重写Array以委派ItemQuantity的所有类Method,这似乎超级草率

0 个答案:

没有答案