定义FactoryGirl工厂,该工厂与继承的模型相关联

时间:2013-10-18 11:15:56

标签: ruby-on-rails ruby-on-rails-3 rspec factory-bot sorcery

有没有人遇到过这个:

我有这样的事情:

型号:

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(继承自User)创建一个ThingsToManager模型(保存在数据库中)

我的工厂是这样的:

FactoryGirl.define do
    factory :user do
        forename 'Test'
        surname 'User'
        sequence(:email) {|n| "#{forename}.#{surname}#{n}@test.com".downcase}
        password 'lalala123@@'
        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)

有什么想法吗?

1 个答案:

答案 0 :(得分: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