4

このファクトリを定義しました:

factory :post, :parent => :post_without_countries, class: Post do |p|
       p.country_ids {|country_ids| [country_ids.association(:country), country_ids.association(:country)]} 
end

そして、2つの一意の国を出力したいと思っています。代わりに、関連付けとして同じ国を 2 回挿入するだけです。

#<Post id: nil, title: "Atque id dolorum consequatur.", body: "Praesentium saepe ullam magnam. Voluptatum tempora ...", created_at: nil, updated_at: nil, user_id: 1>
[#<Country id: 1, name: "Dominican Republic", isocode: "lyb", created_at: "2012-10-20 13:52:18", updated_at: "2012-10-20 13:52:18">, #<Country id: 1, name: "Dominican Republic", isocode: "lyb", created_at: "2012-10-20 13:52:18", updated_at: "2012-10-20 13:52:18">]

何か案は?

4

4 に答える 4

8

build_listまたはcreate_listメソッドを使用することをお勧めします。

post.countries = create_list(:country, 2)
于 2015-08-27T09:25:09.647 に答える
2

代わりに:

2.times { post.countries << FactoryGirl.create(:country) }

after_createRSpec では、次のようなフックを作成できます。

after_create do |post|
  2.times { post.countries << FactoryGirl.create(:country) }
end

国を作成する回数をカスタマイズする必要がある場合は、一時的な属性を作成できます。

#in the post factory definition
ignore do
  num_countries 0 #default to zero
end

#different after_create
after_create do |post, proxy|
  proxy.num_countries.times { post.countries << FactoryGirl.create(:country) }
end
于 2012-10-23T20:37:18.913 に答える
0

OK、私は多くの国の関係の作成を工場から取り出し、代わりにRSpecで作成することでこれを修正しました:

  post = FactoryGirl.build(:post)
  2.times { post.countries << FactoryGirl.create(:country) }
于 2012-10-23T13:17:29.390 に答える
0

factory girl が適切に反復していないようです。私の心に浮かぶ2つの質問は次のとおりです。

FactoryGirl.build使うつもりだったときに使っていますFactoryGirl.createか?

に置き換えp.country_idsてみましたかp.sequence(:country_ids)

それらがあなたを正しい方向に向けてくれることを願っています。そうでない場合、おそらく詳細情報はありますか?

于 2012-10-20T20:11:31.687 に答える