2012-01-03 3 views
1

У меня есть суперкласс класса ActiveRecord Product и подкласс DiscountedProduct, которые используют одну и ту же таблицу, и у меня есть некоторые фабрики для суперкласса, которые я хочу использовать с подклассом.Создание фабрики как другого класса в Ruby с FactoryGirl

Factory(:product).class #=> Product 

То, что я пытаюсь найти это сокращение для:

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

ВНИМАНИЕ: Я не использую Factory.attributes_for так, что необходимые ассоциации получить встроенные.

  • FactoryGirl v2.3.2
  • Rails 3.0.4
+0

Вы пробовали 'Factory (: discounted_product) '? –

+0

У меня нет такой фабрики, только ': product'. – Kostas

+0

Определите его и используйте определение «parent: product» while. –

ответ

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

+0

Вы пытались перегрузить метод инициализации подкласса? Но я предполагаю, что это не вызовет определение родительской фабрики, поэтому поля продукта не могут быть инициализированы. – goldenlink

Смежные вопросы