Factory Girl multiple has_many through

I need to create some factories, which are made of several, have many cross-cutting

Here are my models

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 

That's what i

 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 

What I would like to do is Factory (: member_with_subscription)

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

Is there any way to do this?

+6
source share
2 answers

Consider using the after_build to install all the necessary dependencies. For instance:

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

I do it a little differently, and this method may be a little easier to understand:

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

Source: https://habr.com/ru/post/902315/


All Articles