2012-01-03 107 views
1

我有一些ActiveRecord超類Product和子類DiscountedProduct共享相同的表,我有一些工廠用於我想用於子類的超類。使用FactoryGirl在Ruby中創建一個工廠作爲不同類的工廠

Factory(:product).class #=> Product 

我想找到是一個簡寫:

DiscountedProduct.create(Factory.build(:product).attributes) 

注意: 我不使用Factory.attributes_for使所需協會得到建立。

  • FactoryGirl V2.3.2
  • 的Rails 3.0.4
+0

你試過'廠(:discounted_product)'? – 2012-01-03 09:07:37

+0

我沒有這樣的工廠定義,只有':產品'。 – Kostas 2012-01-03 09:13:00

+0

然後定義它,並在定義時使用'parent:product'。 – 2012-01-03 10:25:51

回答

2

好,似乎factory_girl支持很好的繼承。

您可以定義工廠兩種方式:

  • 爲嵌套定義

    factory :product do 
        name 'Product name' 
    
        factory :discounted_product do 
        discounted true 
        end 
    end 
    
  • 或鏈接定義

    factory :discounted_product :parent => :product do 
        approved true 
    end 
    
+0

沒有辦法實現它沒有繼承呢? – Kostas 2012-01-03 12:31:26

+0

你試過重載子類的初始化方法嗎?但我想這不會調用你的父母工廠定義,所以產品領域可能不會被初始化。 – goldenlink 2012-01-03 13:47:51

相關問題