【问题标题】:ActiveRecord::RecordInvalid: Validation failed for FactoryGirlActiveRecord::RecordInvalid:FactoryGirl 验证失败
【发布时间】:2016-06-05 23:26:40
【问题描述】:

我想生成一个属于: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

但我得到了错误:

失败/错误:stake = FactoryGirl.create(:stake, group: 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。所以我怀疑这就是我建立工厂的方式。

我的工厂关联或我创建对象的方式中是否存在导致此错误的任何内容?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我有一个关于主题的 after_create,它引起了人们的注意。非常感谢,这让我发疯了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2020-07-11
    • 1970-01-01
    相关资源
    最近更新 更多