2011-11-24 75 views
6

我需要创建一些工厂是由多个有许多通过的工厂的女孩多的has_many是

这里是我的模型

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 

这里是我有什么

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 

什么我想要做的是 - 工厂(:member_with_subscription)

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

有没有办法做到这一点?

回答

10

考虑使用after_build回调来设置所有必需的依赖关系。例如:

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

欢呼声,那是伟大的! – Alex

6

我这样做略有不同,而这样可能会稍微容易理解:

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

这是一个很好的例子。谢谢! – MBHNYC