我有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导轨)?特别有趣的是如何为产品型号做到这一点。
答案 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
。