FactoryGirl与协会

时间:2013-01-24 22:01:14

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

我有2个型号,产品和类别。 产品具有category_id属性。因此,产品属于Category,而Category有许多产品。

<!-- language: rb -->
class Product < ActiveRecord::Base
  belongs_to :category
  validates :category, presence: true
end

class Category < ActiveRecord::Base
  has_many :products
end

如何为两种型号定义工厂(FactoryGirl导轨)?特别有趣的是如何为产品型号做到这一点。

2 个答案:

答案 0 :(得分:3)

您可能希望使用两种方案。

如果您不需要与产品相关联的特定类别:

FactoryGirl.define do
  factory :category do
    # category fields
  end
  factory :product do
    # other product fields here
    category
  end
end

然后您可以create(:product),并在创建时为其分配类别。

如果您需要在产品中重复使用已知类别

在这种情况下,您需要显式创建对象。您可以使用上面的相同工厂,但是像这样创建它们:

category = create(:category)
product = create(:product, category: category)

通过这种方式,您可以重复使用多个产品的类别,或单独操作这两个产品。

答案 1 :(得分:1)

如果您使用Mongodb,则可以在工厂内嵌入数据。例如:

factory :category do
  name "My Category"
  product {{
    "name" => "My product",
    "price" => "12"
  }}
end

在这种情况下,请不要忘记accepts_nested_attributes_for :products模型中的Categories