2012-01-03 179 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

相关问题