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。所以我怀疑这就是我建立工厂的方式。
我的工厂关联中是否有任何东西或我创建对象的方式导致了此错误?
听起来好像已经有一个 Stake
和 Group
一样了。我没有看到工厂定义有问题。我会检查您的测试数据库以确保 stakes
table 为空,但这可能不是问题所在。你有一个正在创建 Stake
的 before
块吗?或者 Topic
或 Group
有一个 after_create
自动创建初始 Stake
的回调?
我想生成属于 :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。所以我怀疑这就是我建立工厂的方式。
我的工厂关联中是否有任何东西或我创建对象的方式导致了此错误?
听起来好像已经有一个 Stake
和 Group
一样了。我没有看到工厂定义有问题。我会检查您的测试数据库以确保 stakes
table 为空,但这可能不是问题所在。你有一个正在创建 Stake
的 before
块吗?或者 Topic
或 Group
有一个 after_create
自动创建初始 Stake
的回调?