工厂构建/创建新的belongs_to时违反Mysql外键约束
Posted
技术标签:
【中文标题】工厂构建/创建新的belongs_to时违反Mysql外键约束【英文标题】:Mysql foreign key constraint violation when factory builds/creates a new belongs_to 【发布时间】: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 约束的表,并且它们的关联有效。
我的协会有什么问题?
谢谢
【问题讨论】:
【参考方案1】:没关系,我要的答案在这里:
https://gist.github.com/myronmarston/61380bb4500b4d85dd3f
【讨论】:
以上是关于工厂构建/创建新的belongs_to时违反Mysql外键约束的主要内容,如果未能解决你的问题,请参考以下文章