1

我有一堂课

class Transaction
    include Mongoid::Document

    belongs_to :objectA
    belongs_to :objectB

    def initialize(objectA, objectB)
        super
        @objectA = objectA
        @objectB = objectB
    end
end

现在我正在尝试组合一个Fabricator

Fabricator(:transaction) do
     on_init do
        init_with(Fabricate(:klassA), Fabricate(:klassB))
     end
end

我已经创建了Fabricator(:klassA)并且Fabricator(:klassB)工作得很好。

我不断收到此错误消息:

NoMethodError: undefined method `[]' for #<Fabrication::Schematic::Attribute:0x007f9361b59950>

我相当肯定它与初始化方法有关。如果我删除它的构造函数。

Mongo 版本 2.4.1 制造 (2.6.4) 轨道 (3.2.11)

4

1 回答 1

2

那是因为您的super调用会将您的自定义参数传递给Mongoid::Document期望(最多)两个哈希而不是两个对象的初始化程序。解决方案是调用super(),它不会传递任何参数,或者重写构造函数以仅传递额外的参数:

def initialize(objectA, objectB, args = nil, options = nil)
    super(args, options) 
    @objectA = objectA
    @objectB = objectB
end
于 2013-04-03T15:51:56.890 回答