我有三个型号offer_ticket,事件和报价,下面有三个各自的工厂是模型和工厂给我错误堆栈级别太深。 循环执行offer_ticket-to-event,event-to-offer,然后是offer-to-offer_tickets 建议我解决如何删除此错误
offer_Ticket
class Offer Ticket < Active Record::Base
belongs_to :event
end
事件
class Event < Active Record::Base
has_many :offers , dependent: :restrict_with_error
has_many :offer_tickets , dependent: :restrict_with_error
end
报价
class Offer < Active Record::Base
has_many :offer_tickets , dependent: :restrict_with_error
belongs_to :event
end
他们各自的工厂如下所示
offer_tickets
Factory Girl define do
factory :offer_ticket do
venue_row_id 1
sale_id 1
status "available"
seat_number 1
association(:event)
end
end
事件
Factory Girl define do
factory :event do |f|
f.name { Faker::Name.name }
f.starts_at { Faker::Date.backward(Random.rand(20)).to_date }
f.description { Faker::paragraph }
after(:build) do |event|
create(:offer, event: event)
end
end
end
优惠
Factory Girl define do
factory :offer do
price 1
proxy 1
multiple 1
cancel-others 1
after(:build) do |offer|
create(:offer_ticket, offer: offer)
end
association(:event)
end
端
答案 0 :(得分:0)
最可能的原因可能是您工厂之间的依赖关系。
假设您要使用工厂女孩创建一个Event
,其中包含问题中提到的工厂。执行FactoryGirl.create(:event)
会尝试创建Offer
(请参阅事件工厂的:after_build
)和...
此优惠的创建会触发优惠工厂的:after_build
,它会尝试创建OfferTicket
...
在offer_ticket工厂中,它定义了association :event
,它将再次尝试创建Event
。因此,这将导致无限循环。
我的建议是不使用after_build
在您的案例中创建新对象。您可以单独创建它们,然后再分配给父对象。如果你提供一些rspec代码,它可能会改善我的答案。