Подтвердить что ты не робот

Factory Вложенные документы Girl + Mongoid в светильниках

Допустим, что у вас есть следующие документы:

class User
    include Mongoid::Document
    embeds_one :name
end

class UserName
    include Mongoid::Document
    field :first
    field :last_initial

    embedded_in :user
end

Как вы создаете factory девушку factory, которая инициализирует встроенное имя и последний начальный? Также как бы вы это сделали с отношением embeds_many?

4b9b3361

Ответ 1

Я тоже искал этот, и когда я изучал, я наткнулся на много кода и собрал их все вместе (я бы хотел, чтобы у них были лучшие документы), но вот моя часть кода. Адрес - отношение 1..1, а телефоны - это отношение 1..n к событиям.

  factory :event do
    title     'Example Event'

    address  { FactoryGirl.build(:address) }
    phones    { [FactoryGirl.build(:phone1), FactoryGirl.build(:phone2)] }
  end

  factory :address do
    place     'foobar tower'
    street    'foobar st.'
    city      'foobar city'
  end

  factory :phone1, :class => :phone do
    code      '432'
    number    '1234567890'
  end

  factory :phone2, :class => :phone do
    code      '432'
    number    '0987654321'
  end

(И извините, если я не могу предоставить свои ссылки, они были перепутаны)

Ответ 2

Вот решение, которое позволяет динамически определять количество внедренных объектов:

FactoryGirl.define do
  factory :profile do
    name 'John Doe'
    email '[email protected]'
    user

    factory :profile_with_notes do
      ignore do
        notes_count 2
      end

      after(:build) do |profile, evaluator|
        evaluator.notes_count.times do
          profile.notes.build(FactoryGirl.attributes_for(:note))
        end
      end
    end
  end
end

Это позволяет вам вызвать FactoryGirl.create(:profile_with_notes) и получить две встроенные заметки или вызвать FactoryGirl.create(:profile_with_notes, notes_count: 5) и получить пять встроенных заметок.