2013-11-21 44 views
3

我试图使用Factory Girl来生成具有多态属性的模型实例。例如,属性可以有一个假设,租户可以有一个假设,属性可以拥有多个租户。我想使用Factory Girl来生成:property_with_assumption或者:tenant_with_assumption。工厂女孩未初始化的常量NameError在Rails 4中

我可以做到这一点没有问题属性:

FactoryGirl.define do 
    factory :property do 
    ...fields... 
    end 

    factory :property_with_assumption do 
     after(:create) do |property| 
     FactoryGirl.create(:assumption, assumable: property) 
     end 
    end 
end 

而且我对房客类似的定义:

FactoryGirl.define do 
    factory :tenant, :class => 'Tenant' do 
    ...fields... 
    end 

    factory :tenant_with_assumption do 
    after(:create) do |tenant| 
     FactoryGirl.create(:assumption, assumable: tenant) 
    end 
    end 
end 

但是当我尝试

FactoryGirl.create(:tenant_with_assumption, property: [valid property]) 

我得到

NameError: uninitialized constant TenantWithAssumption 

为什么它只适用于一种型号,而不适用于其他型号?提前致谢。

回答

6

您需要提供:class参数:

​​
+0

感谢您的快速回复。为什么我需要Tenants上的class参数,但不需要属性? – thusson

+1

':property_with_assumption'也不起作用。你可能不会在任何地方调用它。如果工厂名称不同于类名称的下划线版本,则需要提供':class'参数。 –

0

,你可以做一个嵌套的方式为好。

FactoryGirl.define do 
    factory :tenant, :class => 'Tenant' do 
    ...fields... 


    factory :tenant_with_assumption do 
     after(:create) do |tenant| 
     FactoryGirl.create(:assumption, assumable: tenant) 
     end 
    end 
    end 
end 
相关问题