首页 > 解决方案 > 无法添加或更新子行:外键约束失败 - Ruby on Rails

问题描述

我的“子”表单包含以下选择:

<%= child.select :parent_id, options_for_select(Parent.all.map{ |parent| parent.grandparent.name + " - " + parent.name }, {:include_blank => true}) %>

在“更新”操作中,我收到以下错误:

Cannot add or update a child row: a foreign key constraint fails (`database_name`.`childs`, CONSTRAINT `fk_part2_5` FOREIGN KEY (`parent_id`) REFERENCES `parents` (`id`))

模型看起来像这样:

class Child < ApplicationRecord
  belongs_to :parent
end

class Parent < ApplicationRecord
  has_many :childs, :dependent => :delete_all 
end

class GrandParent < ApplicationRecord
  has_many :parents, :dependent => :delete_all
end

标签: mysqlruby-on-railsruby

解决方案


弄清楚了。这是我的选择表格错误。各个选择选项的实际值不是 ID,因此无法更新表。想出来是这样的:

<%= child.collection_select(:parent_id, Parent.all, :id, :parent_with_grandparent_name) %>

class Parent < ActiveRecord::Base

  has_many :childs, :dependent => :delete_all 
  belongs_to :grandparent
  def parent_with_grandparent_name
    grandparent.name + " - " + name
  end
end

推荐阅读