我有Survey
模型和Question
模型,如下所示。 Survey
必须至少有1 Question
且Question
必须属于以下所示的Survey
:
class Survey < ActiveRecord::Base
has_many :questions, class_name: 'Question', inverse_of: :survey
validates :title, presence: true, length: { maximum: 200 }
validates_length_of :questions, maximum: 100, minimum: 1
end
class Question < ActiveRecord::Base
belongs_to :survey, class_name: 'Survey', inverse_of: :questions
validates :title, presence: true, length: { maximum: 200 }
validates :survey, presence: true
end
当我写下工厂时,如下所示,我会得到一个StackOverflow错误,因为Survey会在创建后构建一个Question,而Question会在创建后构建一个Survey,导致无限循环。
FactoryBot.define do
factory :question, class: Question do
association :survey, factory: :survey
title { Faker::Lorem.characters(10) }
end
end
FactoryBot.define do
factory :aya_pg_portfolio_survey_survey, class: Survey do
after(:build) do |survey|
survey.questions = build_list(question, 5)
end
title { Faker::Lorem.characters(10) }
end
end
然后我想删除问题工厂中的调查关联或删除调查工厂中的after(:build)
回拨。但这会导致工厂无效。
似乎应该有一个简单的方法来解决这个问题,因为我只有两个模型,简单需要另一个,但我被卡住了......
答案 0 :(得分:1)
为什么调查工厂没有调查工厂就指向问题工厂?
FactoryBot.define do
factory :question do
title { Faker::Lorem.characters(10) }
survey nil
factory :question_and_survey do
survey
end
end
end
这确实意味着此create(:question_and_survey)
会在调查中返回一个问题,其中包含6个问题。总比没事好吧?
但是就你的问题发表评论,你真的应该考虑允许创建一个空的调查。它的毛发拉得差不多。