Ruby on rails 在FactoryGirl中填充儿童协会时遇到问题
我正在尝试创建一个具有一定数量子对象的父模型 这些协会是这样建立的:Ruby on rails 在FactoryGirl中填充儿童协会时遇到问题,ruby-on-rails,ruby,rspec,factory-bot,Ruby On Rails,Ruby,Rspec,Factory Bot,我正在尝试创建一个具有一定数量子对象的父模型 这些协会是这样建立的: search_keyword_url has_many :competitors competitor belongs_to :search_keyword_url 我对FactoryGirl的定义是: FactoryGirl.define do factory :url, :class => SearchKeywordUrl, aliases: [:search_keyword_url] do use
search_keyword_url has_many :competitors
competitor belongs_to :search_keyword_url
我对FactoryGirl的定义是:
FactoryGirl.define do
factory :url, :class => SearchKeywordUrl, aliases: [:search_keyword_url] do
user
sequence(:url) {|n| "http://example#{n}.com"}
end
factory :competitor do
search_keyword_url
sequence(:url) {|n| "http://competitor#{n}.com"}
end
end
这两个单独使用时效果很好。我还需要一个工厂,将与5个孩子的父母。我想到了这个:
factory :url_with_5_competitors, :parent => :search_keyword_url do |search_keyword_url|
search_keyword_url.after_create { |sku| 5.times { create(:competitor, :search_keyword_url => sku ) } }
end
但是,当我在测试中尝试与5个竞争对手创建url_时:
create(:url_with_5_competitors)
。。。我收到以下错误:
失败/错误:创建(:url_与_5_竞争对手)
ActiveRecord::AssociationTypeMismatch:
应为SearchKeywordUrl(35692),已为#如果有任何帮助,我们将不胜感激。改用
build\u list
如何
factory :url_with_5_competitors, :parent => :search_keyword_url do |search_keyword_url|
competitors { build_list :competitor, 5 }
end
您可能更喜欢这种带有特征的语法:
factory :url, :class => SearchKeywordUrl, aliases: [:search_keyword_url] do
user
sequence(:url) {|n| "http://example#{n}.com"}
trait :with_5_competitors do
competitors { build_list :competitor, 5 }
end
end
使用
create(:url, :with_5_competitors)