我想生成属于:stake
和:topic
的{{1}}工厂。 :group
应该属于:topic
(:group
),在这种情况下,:owner_group
应该是:group
所属的:stake
。主题也属于:membership
。简而言之,我希望这能够设置有效的对象:
it 'should set up all the factories' do
member = FactoryGirl.create(:membership)
topic = FactoryGirl.create(:topic, owner_group: member.group, membership: member)
stake = FactoryGirl.create(:stake, group: member.group, topic: topic)
end
但我收到错误:
失败/错误:桩= FactoryGirl.create(:桩,组: member.group,topic:topic)ActiveRecord :: RecordInvalid: 验证失败:已经采取了小组
这是我的工厂:
factory :user
sequence(:email) { |n| "foo#{n}@bar.com" }
end
factory :group
name Faker::Company.name
factory :owner_group
end
end
factory :membership
user
group
end
factory :topic
owner_group
membership
end
factory :stake
group
topic
end
topic.rb 有这种关联:
belongs_to :owner_group, class_name: "Group", foreign_key: "group_id"
我过去用 rake db:test:prepare 修复了类似的错误,但这些错误并不起作用。我还使用database_cleaner gem配置了spec_helper.rb。所以我怀疑我是如何建立工厂的。
我的工厂协会中是否有任何内容或我创建造成此错误的对象的方式?
答案 0 :(得分:1)
所以听起来已经有一个Stake
与Group
相同。我没有看到工厂定义的问题。我会检查你的测试数据库,以确保stakes
表是空的,但这可能不是问题。您是否有before
块创建了Stake
?或者Topic
或Group
可能会after_create
回调自动创建初始Stake
?