1

多態的なアプローチを使用して、人のMongoidオブジェクト内にメールを埋め込もうとしています。「BSON::InvalidDocument:クラスMongoid :: Relationships :: Embedded::ManyのオブジェクトをBSONにシリアル化できません。」の取得 テストを実行するときはいつでも。以下のコードを参照してください。どれでも大歓迎です。FactoryGirlで人の内部にメールを作成する正しい方法がわかりません。ありがとう。

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
4

1 に答える 1

0

これが、モンゴイドに関連付けが埋め込まれたFactoryGirlを最後に使用したときに採用したアプローチです。代わりに、ユーザーファクトリでこれを試してください。

emails { |e| [e.association(:email)] }
于 2012-07-12T01:18:58.017 に答える