2012-06-29 56 views
1

我试图使用多态的方法在人类Mongoid对象内嵌入电子邮件。获取“BSON :: InvalidDocument:无法将类Mongoid :: Relations :: Embedded :: Many的对象序列化为BSON。”每当我运行测试。请参阅下面的代码,任何将不胜感激。我不确定在FactoryGirl的个人内部建立电子邮件的正确方法。谢谢。Mongoid Polymorphic Association + FactoryGirl + RSpec

class Email 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    embedded_in :mailable, polymorphic: true 

    field :email, type: String 
    field :category, type: String 
end 

class Person 
    include Mongoid::Document 
    embeds_many :emails, as: :mailable  #polymorhpic 
    index "emails.email", unique: true 

    field :first_name, type: String 
    field :middle_name, type: String 
    field :last_name, type: String 

    validates_uniqueness_of :emails 

end 


FactoryGirl.define do 
    sequence(:fn) {|n| "first_name#{n}" } 
    sequence(:ln) {|n| "last_name#{n}" } 
    factory :person do 
    first_name { generate(:fn) } 
    last_name { generate(:ln) } 
    gender 'M' 
    nationality 'USA' 
    ssn '123-88-1111' 
    factory :emails_ do 
     emails { Factory.build(:email) } 
    end 
    end 
end 

FactoryGirl.define do 
    sequence(:address) {|n| "user#{n}@mail.com" } 
    factory :email do 
    email { generate(:address) } 
    category 'personal' 
    end 
end 

回答

0

下面是我上次在mongoid中使用带有嵌入关联的Factory Girl的方法。相反,请在用户工厂尝试此操作。

emails { |e| [e.association(:email)] }