2013-10-18 43 views
0

模型有没有人碰到这个来:定义FactoryGirl工厂,关联到它继承

我有这样的事情:

型号:

class User < ActiveRecord::Base 

    authenticates_with_sorcery! 

    attr_accessible :forename, :surname, :email, :password, :password_confirmation 
... 
end 

class Manager < User 
    has_many :things_to_manage 

... 
end 

class ThingsToManage < ActiveRecord::Base 
    attr_accessible :stuff, :more_stuff 

    belongs_to :manager 

... 
end 

我想建立一个FactoryGirl.create(:things_to_manage)将使用Manager(继承自用户)创建一个ThingsToManager模型(保存在数据库中)

我的工厂是这样的:

FactoryGirl.define do 
    factory :user do 
     forename 'Test' 
     surname 'User' 
     sequence(:email) {|n| "#{forename}.#{surname}#{n}@test.com".downcase} 
     password '[email protected]@' 
     end 
end 

FactoryGirl.define do 
    factory :manager do 

    end 
end 

FactoryGirl.define do 
    factory :things_to_manage do 

    stuff "rhubarb rhubarb" 
    more_stuff "la la la" 
    association :manager, :factory => :user 

    end 
end 

association :manager, :factory => :user不起作用;我得到

的ActiveRecord :: AssociationTypeMismatch:经理(#70275174714940) 预期,得到了用户(#70275151319360)

任何想法?

+0

您是否正确使用单表继承了“类型”字段? –

+0

嗨Beerlington - 我不确定,它看起来很适合我......你能解释一下吗? –

回答

0

this answer你可以试试你的经理工厂改为:

FactoryGirl.define do 
    factory :manager, class: Manager, :parent => :user do 

    end 
end 

然后你things_to_manage工厂:

FactoryGirl.define do 
    factory :things_to_manage do 

    stuff "rhubarb rhubarb" 
    more_stuff "la la la" 
    manager 

    end 
end 
+0

感谢您的信息,但是当我这样做时,我得到一个错误(未定义的方法'password_attribute_name'为零:NilClass)。所以我猜工厂正试图调用用户模型上的一个方法。也许有一种方法可以在创建之前创建一个用户,并将它的id与ThingsToManage模型关联起来? –