【问题标题】:Mysql foreign key constraint violation when factory builds/creates a new belongs_to工厂构建/创建新的belongs_to时违反Mysql外键约束
【发布时间】:2018-03-08 15:51:28
【问题描述】:

我有两个模型:

class Language < ActiveRecord::Base
  self.primary_key = 'language_id'

  has_many :results_footers
end

class ResultsFooter < ActiveRecord::Base
  belongs_to :language
end

工厂:

# spec/factories/languages.rb
FactoryBot.define do
  factory :language do
    sequence(:language_id)
  end
end

测试:

# spec/models/results_footer.rb
require 'rails_helper'

RSpec.describe ResultsFooter, :type => :model do
  it 'has a valid factory' do
    create(:results_footer).should be_valid
  end
 end

results_footer 表是一个 mysql 表,其 language_id 字段具有 fk 约束。

当我运行测试时,我得到:

ActiveRecord::InvalidForeignKey: Mysql2::Error: 无法添加或更新子行:外键约束失败 (thing_dev.results_footers, CONSTRAINT results_footers_ibfk_2 FOREIGN KEY (language_id) REFERENCES language (language_id) ON UPDATE CASCADE ): INSERT INTO results_footers (language_id, grade, content, exam_type_id) VALUES (1, 'D', 'Hello World', 104)

当然,如果我删除约束,它会起作用。但删除约束不是一种选择。

奇怪的是,我还有许多其他具有类似 fk 约束的表,并且它们的关联有效。

我的协会有什么问题?

谢谢

【问题讨论】:

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


    【解决方案1】:

    没关系,我要的答案在这里:

    https://gist.github.com/myronmarston/61380bb4500b4d85dd3f

    【讨论】:

      猜你喜欢
      • 2016-04-24
      • 2018-05-01
      • 2011-05-12
      • 2014-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      相关资源
      最近更新 更多