2011-11-24 8 views
6

Necesito crear algunas fábricas que están hechos de múltiples tiene muchos a través de estáFactory Girl has_many múltiple a través es

Éstos son mis modelos

Topic 
    has_many :plan_topics 
    has_many :plans, :through => :plan_topics 

PlanTopic 
    belongs_to :plan 
    belongs_to :topic 

Plan 
    has_many :subscriptions 
    has_many :members, :through => :subscriptions 
    has_many :plan_topics 
    has_many :topics, :through => :plan_topics 

Subscription 
    belongs_to :member 
    belongs_to :plan 

Member 
    has_many :subscriptions 
    has_many :plans, :through => :subscriptions 

Aquí es lo que tengo

Factory.define :topic do |topic| 
    topic.name "Operations" 
end 

Factory.define :plan do |plan| 
    plan.title "A test Finance plan" 
    plan.price "200" 
end 

Factory.define :plan_topic do |plan_topic| 
    plan_topic.topic {|topic| topic.association(:topic)} 
    plan_topic.plan {|plan| plan.association(:plan)} 
end 

Lo Me gustaría hacer es esto - Fábrica (: member_with_subscription)

Factory.define :member_with_subscription do |subscription| 
    subscription.association(:plan_with_topic) 
    subscription.association(:member) 
end 

¿Hay alguna forma de hacerlo?

Respuesta

10

Considere el uso de la devolución de llamada after_build para configurar todas las dependencias requeridas. Por ejemplo:

Factory.define :member_with_subscription, :class => 'Member' do |m| 
    m.after_build do |member| 
    member.subscriptions << Factory.build(:subscription) 
    end 
end 
+0

Cheers, eso es genial! – Alex

6

lo hago de forma ligeramente diferente, y de esta manera puede ser que sea un poco más fácil de entender:

FactoryGirl.define do 
    factory :member_with_description do 
    after(:build) do |member| 
     member.subscriptions << FactoryGirl.build(:subscription) 
    end 
    end 
end 
+0

Este es un excelente ejemplo. ¡Gracias! – MBHNYC

Cuestiones relacionadas