在工厂中指定关联

时间:2013-08-22 12:57:01

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

我想通过FactoryGirl指定以下类型的关联。我有三个模型A,B和C,其中DataMapper中的C模型如下:

Class C do
   include DataMapper::Resource
   belongs_to :A, :key=>true
   belongs_to :B, :key=>true
end

我不知道如何在FactoryGirl中指定它,即我的意思是我想这样写:

factory :c do |c|
<To be Filled>
end

请帮忙。

3 个答案:

答案 0 :(得分:0)

许可属于LicenseTemplate

FactoryGirl.define do
  factory :license do
    start_date { Time.now}
    end_date   { Time.now + 30.days }

    factory :license_with_template do
      association :license_template, factory: :license_template
    end

    after(:build) do |doc|
      if doc.license_template
        doc.agents_count = doc.license_template.agents
        doc.requests = doc.license_template.requests
      end
    end
  end
end

上面的代码给了我两个工厂'许可'和'license_with_template'。在'build'块之后初始化需要在保存对象之前初始化的值。

答案 1 :(得分:0)

不确定DataMapper(以及它如何适用于/如果它包含在工厂定义中),但对于关联,请执行以下操作:

FactoryGirl.define do

  factory :C do |c|
    ...
    c.association :a
    c.association :b
  end  

end

答案 2 :(得分:0)

FactoryGirl.define do
  factory :c do |f|
    f.a
    f.b
  end
end

如果为ab创建工厂,并确保工厂的名称与模型的名称相同,则只需指定关联即可。每次执行时,FactoryGirl都会创建abFactoryGirl.create(:c)。该关联应仅在一方指定,最好属于一方。