factory_girl 4.1中的has_and_belongs_to_many关联

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为这两个对象定义工厂呢? 更新 以下是我目前想到的:
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

这个问题有帮助吗:https://dev59.com/vnM_5IYBdhLWcg3wMgAF?rq=1 - Misha M
最佳答案实际上并没有回答问题...第二个答案接近,但似乎已经过时了。 - Nick ONeill
我这里也遇到了工厂用户和角色的相同问题(其中两者之间存在habtm关系)。你找到解决方案了吗? - Ptitaw
1个回答

2

我认为问题在于关联名称指定不正确。一个 标签 可以拥有多个公司,而不是一个,所以应该这样写:

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

作为一个旁注,除非你试图建立多态关系,否则要避免使用type作为列名。

标签的工厂是什么? - Ptitaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接