ActiveRecord :: RecordInvalid:FactoryGirl的验证失败

时间:2016-02-23 22:04:51

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

我想生成属于: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。所以我怀疑我是如何建立工厂的。

我的工厂协会中是否有任何内容或我创建造成此错误的对象的方式?

1 个答案:

答案 0 :(得分:1)

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