2011-09-24 31 views
34

Hãy nói rằng bạn có tài liệu mongoid sau:tài liệu Factory Girl + Mongoid nhúng vào đồ đạc

class User 
    include Mongoid::Document 
    embeds_one :name 
end 

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

    embedded_in :user 
end 

Làm thế nào để bạn tạo ra một nhà máy cô gái nhà máy mà khởi tên đầu tiên nhúng và viết tắt? Ngoài ra, bạn sẽ làm như thế nào với mối quan hệ embeds_many?

Trả lời

62

Tôi cũng đang tìm kiếm điều này và khi tôi nghiên cứu, tôi đã tìm hiểu rất nhiều mã và đã ghép chúng lại với nhau (tôi muốn có tài liệu tốt hơn) nhưng đây là phần của tôi. Địa chỉ là mối quan hệ 1..1 và Điện thoại là mối quan hệ 1..n với các sự kiệ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 

(Và xin lỗi nếu tôi không thể cung cấp các liên kết của tôi, họ đã kinda messed up)

+0

Cảm ơn vì điều này. Tôi chỉ lãng phí thời gian theo dõi vấn đề này. –

+1

Lưu ý rằng thuộc tính điện thoại là một mảng (các cuộc gọi FactoryGirl được bao quanh bởi []). Bạn không cần nhiều hơn một: điện thoại nhưng nó phải là một mảng nếu mối quan hệ là một embeds_many. Chi tiết đó chi phí cho tôi khoảng 4 giờ! – SteveO7

5

Dưới đây là một giải pháp cho phép bạn tự động xác định số lượng đối tượng nhúng:

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 

Điều này cho phép bạn gọi FactoryGirl.create(:profile_with_notes) và nhận hai ghi chú được nhúng hoặc gọi FactoryGirl.create(:profile_with_notes, notes_count: 5) và nhận được năm ghi chú được nhúng.

Các vấn đề liên quan