ActiveRecord::RecordInvalid:FactoryGirl 验证失败

ActiveRecord::RecordInvalid: Validation failed for FactoryGirl

我想生成属于 :topic:group:stake 工厂。 :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

但我收到错误:

Failure/Error: stake = FactoryGirl.create(:stake, group: member.group, topic: topic) ActiveRecord::RecordInvalid: Validation failed: Group has already been taken

这是我的工厂:

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。所以我怀疑这就是我建立工厂的方式。

我的工厂关联中是否有任何东西或我创建对象的方式导致了此错误?

听起来好像已经有一个 StakeGroup 一样了。我没有看到工厂定义有问题。我会检查您的测试数据库以确保 stakes table 为空,但这可能不是问题所在。你有一个正在创建 Stakebefore 块吗?或者 TopicGroup 有一个 after_create 自动创建初始 Stake 的回调?