ruby on rails - Factory Girl+Mongoid documentos incrustados en accesorios
ruby-on-rails embed (2)
Digamos que tiene los siguientes documentos mongoides:
class User
include Mongoid::Document
embeds_one :name
end
class UserName
include Mongoid::Document
field :first
field :last_initial
embedded_in :user
end
¿Cómo se crea una fábrica de fábrica que inicializa el nombre incrustado y la última inicial? Además, ¿cómo lo harías con una relación de embeds_many
?
Aquí hay una solución que le permite definir dinámicamente la cantidad de objetos incrustados:
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
Esto le permite llamar a FactoryGirl.create(:profile_with_notes)
y obtener dos notas incrustadas, o llamar a FactoryGirl.create(:profile_with_notes, notes_count: 5)
y obtener cinco notas incrustadas.
También estaba buscando este y mientras investigaba tropecé con un montón de código y los reconstruí todos (aunque me gustaría que hubiera documentos mejores), pero esta es mi parte del código. La dirección es una relación 1..1 y Phones es una relación 1..n con los eventos.
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
(Y lo siento si no puedo proporcionar mis enlaces, estaban un poco desordenados)