簡體   English   中英

的ActiveRecord :: InvalidForeignKey

[英]ActiveRecord::InvalidForeignKey

我正在使用mysql 5.5和Rails 3.2.13。 我有這樣的表:

'CREATE TABLE `visit` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `uri` varchar(2048) COLLATE utf8_unicode_ci NOT NULL,
  `remote_ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `user_agent` varchar(2048) COLLATE utf8_unicode_ci NOT NULL,
  `client_id` bigint(20) DEFAULT NULL,
  `position_id` bigint(20) DEFAULT NULL,
  `job_posting_id` bigint(20) DEFAULT NULL,
  `assessment_id` bigint(20) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idv_visit_assess_id` (`assessment_id`),
  KEY `fk_visit_client` (`client_id`),
  KEY `fk_visit_position` (`position_id`),
  KEY `fk_visit_job_posting` (`job_posting_id`)
) ENGINE=InnoDB AUTO_INCREMENT=28649 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci'

這樣的模型:

class Visit < ActiveRecord::Base
  has_many :visit_actions
end

我有時會在生產日志中觀察到此類錯誤(“ remote_ip”已更改):

#<ActiveRecord::InvalidForeignKey: ActiveRecord::JDBCError: Cannot add or update a child row: a foreign key constraint fails (`hirex/visit`, CONSTRAINT `fk_visit_job_posting` FOREIGN KEY (`job_posting_id`) REFERENCES `job_posting` (`id`)): INSERT INTO `visit` (`assessment_id`, `client_id`, `created_at`, `job_posting_id`, `position_id`, `remote_ip`, `updated_at`, `uri`, `user_agent`) VALUES (NULL, NULL, '2013-09-13 00:25:02', 8716, NULL, '127.0.0.1', '2013-09-13 00:25:02', '/applicant/exit_job_posting', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)')>

我花了幾天時間嘗試重現此問題,但沒有成功。 如果我要插入null而不是真實的'job_posting_id'或不令人興奮的job_posting的ID,也可以。

有任何想法嗎?

發生的事情是您(或其他人正在嘗試添加job_posting_id表中不存在的job_posting 。我沒有太多代碼可以說明為什么會這樣,最常見的原因之一是有人渲染了表單(使用job_posting選擇),並在提交之前,給定job_posting刪除了其他人。

在沒有外鍵約束的情況下,Rails的工作效率非常高-強制執行它們有任何特殊原因嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM