我有一个Animal
父类。
Bird
和Monkey
是通过STI扩展Animal
的子类。
class Animal < ActiveRecord::Base
end
class Bird < Animal
end
class Monkey < Animal
end
有没有办法定义我的FactoryGirl工厂,以便FactoryGirl.create(:animal)
为我随机调用FactoryGirl.create(:bird)
或FactoryGirl.create(:monkey)
?
答案 0 :(得分:2)
见https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#custom-construction。你可以这样做:
FactoryGirl.define do
factory :animal do
initialize_with do
if [true, false].sample
Monkey.new
else
Bird.new
end
end
end
end
答案 1 :(得分:0)
只是一个偏爱,但我想我会与以后的Googlers分享这种选择:
FactoryGirl.define do
factory(:animal) do
type { %w[Monkey Bird].sample }
initialize_with do
record = new(attributes)
record.becomes(record.type.constantize)
end
end
end