factory girlで多対多の関連を作る際にどうしてもうまくいかなくて困りました。
結果として以下のようにするとうまくいきました。
factories.rb
Factory.define :image do |f| f.url {Factory.next(:image_url)} f.blog_article_id 1 f.training_data_registed_flg false f.filesize 1000 f.filepath "" end Factory.define :actor_tag, :class => Tag do |f| f.name "testname" f.actor_id 1 end Factory.define :not_actor_tag, :class => Tag do |f| f.name "testtag" end
specファイル
before(:all) do not_actor_tag = Factory(:not_actor_tag) actor_tag = Factory(:actor_tag) Factory(:image, :tags => [actor_tag, not_actor_tag]) Factory(:image, :tags => [not_actor_tag, actor_tag]) end
こんな感じでテストコードの中でどのデータに紐付けるかを指定しなければいけないようです。
この書き方はださいなぁ。。
最初はfactories.rbの中でFactory.createを使って紐付くデータを指定しようとしたんですが、どうもfactories.rbの中でcreateしてもDBには書き込まれないようです。
具体的には、以下のコードだとTagsテーブルには何もデータが作られません。
factories.rb
Factory.define :actor_tag, :class => Tag do |f| f.name "testname" f.actor_id 1 end Factory.define :not_actor_tag, :class => Tag do |f| f.name "testtag" end not_actor_tag = Factory(:not_actor_tag) actor_tag = Factory(:actor_tag) Factory.define :image do |f| f.url {Factory.next(:image_url)} f.blog_article_id 1 f.training_data_registed_flg false f.filesize 1000 f.filepath "" f.tags => [actor_tag, not_actor_tag ] end
specファイル
before(:all) do Factory(:image, :tags => [actor_tag, not_actor_tag])