Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在FactoryGirl中填充儿童协会时遇到问题_Ruby On Rails_Ruby_Rspec_Factory Bot - Fatal编程技术网

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),已为#(35694)


如果有任何帮助,我们将不胜感激。

改用
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)