【问题标题】:has_and_belongs_to_many associations in factory_girl 4.1factory_girl 4.1 中的 has_and_belongs_to_many 关联
【发布时间】:2012-10-25 21:54:46
【问题描述】:

我是 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 上的先前答案(包括 this one),但其中大多数已过时和/或对问题没有正确答案。有没有人可以帮助使用 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

【问题讨论】:

  • 这个问题有帮助吗:stackoverflow.com/questions/1484374/…
  • 最佳答案实际上并没有回答这个问题......第二个接近但似乎过时了。
  • 我在这里与用户和角色的工厂有同样的问题(我在两者之间有一个 habtm 关系。你找到解决方案了吗?

标签: ruby-on-rails ruby-on-rails-3 rspec factory-bot


【解决方案1】:

我认为问题在于关联名称指定不正确。一个Tag 有很多公司,而不是一个,所以:

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

附带说明,您要避免使用type 作为列名,除非您尝试建立多态关系。

【讨论】:

  • 标签的工厂是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多