4

私は factory_girl を初めて使用し、次のモデルのファクトリを効果的に生成する方法を見つけようとしています:

class Company < ActiveRecord::Base
    has_and_belongs_to_many :tags
end

class Tags < ActiveRecord::Base
    has_and_belongs_to_many :companies

    validates :type , :inclusion => { :in => %w(market location) } 
end

StackOverflow に関する以前の回答 (これを含む) を確認しましたが、それらのほとんどは古くなっているか、質問に対する適切な回答がありません。Factorygirl でこれら 2 つのオブジェクトのファクトリを定義するのを手伝ってくれる人はいますか?

アップデート

これが私がこれまでに思いついたものです

FactoryGirl.define do
factory :tag do
    id  448
        trait :market do
        type "market"
    end
    trait :location do
        type "location"
    end
    name "software"
end

factory :company do
    id  1234
    name "Apple Inc."
    factory :company_with_tags do
        #setting the default # of tags for companies
        ignore do
            tag_count   2
        end

            after(:create) do |company , evaluator|
                FactoryGirl.create_list(:tag , evaluator.tag_count , company: company)
            end 
    end
end
end
4

1 に答える 1

2

協会名の指定が間違っていることが問題だと思います。ATagには 1 つの会社ではなく、多くの会社があるため、次のようになります。

after(:create) do |company , evaluator|
  FactoryGirl.create_list(:tag , evaluator.tag_count , companies: [company])
end

type補足として、ポリモーフィックな関係を設定しようとしている場合を除き、列名として使用することは避けてください。

于 2012-10-27T03:18:07.187 に答える