如何使用需要参数的构造函数为mongo模型构造对象

时间:2013-04-03 14:48:54

标签: ruby-on-rails ruby-on-rails-3 mongoid fabrication-gem

我有一个班级

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>

我很确定它与initialize方法有关。如果我删除它的构造函数。

Mongo版本2.4.1 制作(2.6.4) rails(3.2.11)

1 个答案:

答案 0 :(得分:2)

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

def initialize(objectA, objectB, args = nil, options = nil)
    super(args, options) 
    @objectA = objectA
    @objectB = objectB
end